Ответы:
Вы можете переместить вкладку, :tabm
используя относительные аргументы или абсолютные аргументы с нулевым индексом.
абсолют:
:tabm i
родственник:
:tabm +i
:tabm -i
Это относительно новая функция. Так что, если это не сработает, попробуйте обновить vim.
:tabm
принимает относительные аргументы в vim 7.3.
Вы имеете в виду перемещение текущей вкладки? Это работает с использованием 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. Я не большой виМ кодер , так что, возможно, это можно сделать лучше, но вот как это работает для меня:
" 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.
Я искал то же самое, и после некоторых сообщений я нашел более простой способ, чем функция:
: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>
:execute "tabmove" tabpagenr() + 1 <CR>
для перемещения вправо. Для MacVim 8.0.1420 (144) .
:tabm n
Где n
число, обозначающее позицию (начиная с нуля)
Я думаю, что лучшее решение состоит в том, чтобы переместить вкладку влево или вправо в ее текущее положение вместо того, чтобы вычислять числовое значение новой позиции, в которой вы хотите ее разместить.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
С помощью приведенных выше комбинаций клавиш вы сможете перемещать текущую вкладку:
В дополнение к хорошим предложениям в других ответах, вы также можете просто перетаскивать вкладки мышью, чтобы перемещать их, если у вас включена поддержка мыши.
Это включено по умолчанию в MacVim и других реализациях GUI vim, независимо от того, используете ли вы вкладки виджетов GUI или вкладки стилей терминала в режиме GUI.
Он также работает в чистом tty режиме Vim, если у вас есть set mouse=a
и есть подходящий терминал (xterm и большинство его эмуляторов, такие как gnome-терминал, Terminal.app, iTerm2 и PuTTY / KiTTY, чтобы назвать представление). Обратите внимание, что щелчки мыши за столбцом 222 также требуют set ttymouse=sgr
; см. в Vim, почему моя мышь не работает после 220-го столбца? для фона на это.
Я написал плагин под названием vim-tabber, который предоставляет некоторые дополнительные функции для переключения вкладок, их смещения и добавления к возможностям встроенных команд манипулирования вкладками, при этом оставаясь в значительной степени совместимым со встроенными модулями. Даже если вы решите не использовать плагин, в README есть некоторая общая информация об использовании вкладок.
Почему-то у меня перестала работать функция ответа. Я подозреваю конфликт с 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>
-tabm
и +tabm
мой vim 7.4 не правильно перемещать вкладки. Также my :help tabm
не перечисляет это как допустимый синтаксис. Поэтому я заменил последнее else execute ...endif
с elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
использованием ответа Пабло
tabmove
и знак -
/ +
в execute
строке.
Вот мой макрос, использующий относительные аргументы из ответа @ 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>
Он обрабатывает упаковочный футляр.