Відповіді:
Ви можете перенести вкладку, :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.
У мене є дві ключові прив’язки, які переміщують мою поточну вкладку вліво або вправо. Дуже зручно!
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.
Я шукав те саме, і після деяких публікацій я знайшов простіший спосіб, ніж функція:
: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, 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 неправильно переміщати вкладки. Також мій :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>
Він обробляє обгортковий корпус.