Есть ли команда vim для перемещения вкладки? - PullRequest
178 голосов
/ 01 ноября 2011

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

Ответы [ 7 ]

242 голосов
/ 09 августа 2013

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

абсолютные:

  • Переместите вкладку в положение i: :tabm i

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

  • Перемещение позиций табуляции i вправо: :tabm +i
  • Перемещение позиций табуляции i влево: :tabm -i

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

37 голосов
/ 01 ноября 2011

Вы имеете в виду перемещение текущей вкладки?Это работает с использованием 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.

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

РЕДАКТИРОВАТЬ: Вот мой макрос 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.

25 голосов
/ 25 июня 2013

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

: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>
5 голосов
/ 01 декабря 2016

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

:tabm n

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


Перемещение вкладок влево / вправо

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

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

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

  • Влево, используя: Alt + Влево
  • Справа с помощью: Alt + Справа
4 голосов
/ 02 ноября 2013

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

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

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

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

1 голос
/ 05 января 2018

Вот мой макрос, использующий относительные аргументы из ответа @ maybeshewill:

" Shortcuts to move between tabs with Ctrl+Shift+Left/Right
function TabLeft()
   if tabpagenr() == 1
      execute "tabm"
   else
      execute "tabm -1"
   endif
endfunction

function TabRight()
   if tabpagenr() == tabpagenr('$')
      execute "tabm" 0
   else
      execute "tabm +1"
   endif
endfunction

map <silent><C-S-Right> :execute TabRight()<CR>
map <silent><C-S-Left> :execute TabLeft()<CR>

Он обрабатывает регистр переноса.

1 голос
/ 14 июня 2015

Почему-то у меня перестал работать ответ функции. Я подозреваю конфликт с 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...