Есть ли команда vim, чтобы переместить вкладку?

Как изменить позицию/порядок текущей вкладки в Vim? Например, если я хочу переместить текущую вкладку в первую вкладку?

Ответ 1

Вы можете переместить вкладку с помощью :tabm, используя абсолютные или относительные абсолютные аргументы с нулевым индексом.

абсолют:

  • Переместите вкладку в позицию i: :tabm i

относительно:

  • Переместите вкладку я вправо: :tabm +i
  • Переместите вкладку я позиций слева: :tabm -i

Это относительно новая особенность. Поэтому, если он не работает, попробуйте обновить свой vim.

Ответ 2

Вы хотите переместить текущую вкладку? Это работает с помощью tabmove.

:tabm[ove] [N]                                          *:tabm* *:tabmove*
            Move the current tab page to after tab page N.  Use zero to
            make the current tab page the first one.  Without N the tab
            page is made the last one.

У меня есть две привязки клавиш, которые перемещают мою текущую вкладку влево или вправо. Очень удобно!

EDIT: Вот мой макрос VIM. Я не большой ViM-кодер, так что, возможно, это может быть сделано лучше, но так, как это работает для меня:

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    " get number of tab pages.
    let ntp=tabpagenr("$")
    " move tab, if necessary.
    if ntp > 1
        " get number of current tab page.
        let ctpn=tabpagenr()
        " move left.
        if a:direction < 0
            let index=((ctpn-1+ntp-1)%ntp)
        else
            let index=(ctpn%ntp)
        endif

        " move tab page.
        execute "tabmove ".index
    endif
endfunction

После этого вы можете связывать ключи, например, следующим образом: .vimrc:

map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>

Теперь вы можете переместить текущую вкладку, нажав F9 или F10.

Ответ 3

Я искал то же самое, и после некоторых сообщений я нашел более простой способ, чем функцию:

:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left

tabpagenr() возвращает фактическую позицию табуляции, а tabmove использует индексы.

Я отобразил право на Ctrl + L, а слева - Ctrl + H:

map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>

Ответ 4

Переместить текущую вкладку в позицию n th

:tabm n

Где n - это число, обозначающее позицию (начиная с нуля)


Переместить вкладки влево/вправо

Я думаю, лучшее решение - переместить вкладку влево или вправо на текущую позицию вместо того, чтобы вычислять численное значение новой позиции, в которой вы хотите.

noremap <A-Left>  :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>

С помощью вышеуказанных раскладок вы сможете переместить текущую вкладку:

  • Влево, используя: Alt + Left
  • Справа с помощью: Alt + Right

Ответ 5

В дополнение к лучшим предложениям в других ответах вы также можете просто перетаскивать вкладки с помощью мыши, чтобы переместить их, если у вас включена поддержка мыши.

Это включено по умолчанию в MacVim и других реализациях vim vim, используя ли вкладки виджета GUI или вкладки стиля терминала в режиме графического интерфейса.

Он также работает в режиме чистого tty Vim, если у вас есть set mouse=a и есть подходящий терминал (xterm и большинство его эмуляторов, таких как gnome-terminal, Terminal.app, iTerm2 и PuTTY/KiTTY, чтобы назвать вид). Обратите внимание, что щелчки мыши за столбцом 222 также требуют set ttymouse=sgr; см. В Vim, почему моя мышь не работает за 220-й столбец? для фона.

Я написал плагин под названием vim-tabber, который предоставляет некоторые дополнительные функции для замены вкладок, их смещения и добавления в возможности встроенных команд манипуляции с вкладками, оставаясь в значительной степени совместимыми со встроенными. Даже если вы решите не использовать плагин, в README есть общая информация об использовании табуляции.

Ответ 6

По какой-то причине ответ функции перестает работать для меня. Я подозреваю, что конфликт с vim-ctrlspace. Несмотря на это, математика в функциональном ответе не нужна, так как Vim может перемещать вкладки влево и вправо со встроенными функциями. Нам просто нужно обработать упаковку, потому что Vim не является дружественным пользователю.

" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
    let s:current_tab=tabpagenr()
    let s:total_tabs = tabpagenr("$")

    " Wrap to end
    if s:current_tab == 1 && a:direction == -1
        tabmove
    " Wrap to start
    elseif s:current_tab == s:total_tabs && a:direction == 1
        tabmove 0
    " Normal move
    else
        execute (a:direction > 0 ? "+" : "-") . "tabmove"
    endif
    echo "Moved to tab " . tabpagenr() . " (previosuly " . s:current_tab . ")"
endfunction

" Move tab left or right using Command-Shift-H or L
map <D-H> :call TabMove(-1)<CR>
map <D-L> :call TabMove(1)<CR>