7 ответов:
вы можете Переместить вкладку с
:tabmиспользуя либо относительные, либо абсолютные аргументы с нулевым индексом.абсолютный:
- Переместить вкладку в положение i:
:tabm iродственник:
- Переместить вкладку I позиции вправо:
:tabm +i- Переместить вкладку I позиции влево:
:tabm -iЭто относительно новая функция. Поэтому, если это не работает, попробуйте обновить vim.
вы имеете в виду перемещение текущей вкладки? Это работает с помощью 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. Я не большой ВИМ кодер, так что, возможно, это можно было сделать лучше, но вот как это работает для меня:
" 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 leftThe tabpagenr() возвращает фактическое положение вкладки, а tabmove использует индексы.
я сопоставил справа Ctrl+L и слева Ctrl+H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR> map <C-J> :execute "tabmove" tabpagenr() <CR>
переместить текущую вкладку в nе позиция
:tabm nздесь
n- это число, обозначающее позицию (начиная с нуля)
переместить вкладки влево / вправо
Я думаю, что лучшее решение-это Переместить вкладку влево или вправо до ее текущей позиции вместо того, чтобы вычислять числовое значение новой позиции, в которой Вы ее хотите.
noremap <A-Left> :-tabmove<cr> noremap <A-Right> :+tabmove<cr>С помощью данной таблицы, вы сможете двигаться текущая вкладка:
- слева с помощью: Alt + левый
- справа через: Alt + право
в дополнение к прекрасным предложениям в других ответах, вы также можете просто перетащить вкладки с помощью мыши, чтобы переместить их, если у вас включена поддержка мыши.
это включено по умолчанию в MacVim и других реализациях GUI vim, будь то использование вкладок виджета GUI или вкладок стиля терминала в режиме GUI.
Он также работает в чистом режиме tty Vim, если у вас есть
set mouse=aи иметь подходящий терминал (xterm и большинство его эмуляторов, таких как gnome-terminal, Terminal.приложение, 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>
вот мой макрос, используя относительные аргументы из ответа @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>он обрабатывает упаковочный чехол.
Comments