Antworten:
Sie können eine Registerkarte mit :tabm
relativen oder absoluten Nullindexargumenten verschieben.
absolut:
:tabm i
relativ:
:tabm +i
:tabm -i
Es ist eine relativ neue Funktion. Wenn es nicht funktioniert, aktualisieren Sie Ihr vim.
:tabm
in vim 7.3 relative Argumente akzeptiert werden.
Meinen Sie damit, die aktuelle Registerkarte zu verschieben? Dies funktioniert mit 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.
Ich habe zwei Tastenkombinationen, die meine aktuelle Registerkarte nach links oder rechts verschieben. Sehr praktisch!
EDIT: Hier ist mein VIM-Makro. Ich bin kein großer ViM- Codierer, also könnte es vielleicht besser gemacht werden, aber so funktioniert es bei mir:
" 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
Danach können Sie Schlüssel binden, zum Beispiel wie folgt in .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Jetzt können Sie Ihre aktuelle Registerkarte verschieben, indem Sie F9 oder F10 drücken.
Ich habe nach dem gleichen gesucht und nach einigen Beiträgen einen einfacheren Weg als eine Funktion gefunden:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Die tabpagenr () gibt die aktuelle Registerkarte Position, und tabmove verwendet Indizes.
Ich habe rechts Strg + L und links Strg + H zugeordnet:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
nach rechts bewegen. Für MacVim 8.0.1420 (144) .
:tabm n
Wo n
ist eine Zahl, die die Position bezeichnet (beginnend bei Null)?
Ich denke, eine bessere Lösung besteht darin, die Registerkarte nach links oder rechts an ihre aktuelle Position zu verschieben, anstatt den numerischen Wert der neuen Position herauszufinden, an der Sie sie haben möchten.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Mit den obigen Keymaps können Sie die aktuelle Registerkarte verschieben:
Zusätzlich zu den feinen Vorschlägen in anderen Antworten können Sie Tabs auch einfach mit der Maus ziehen, um sie zu verschieben, wenn Sie die Mausunterstützung aktiviert haben.
Dies ist in MacVim und anderen GUI vim-Implementierungen standardmäßig aktiviert, unabhängig davon, ob Sie die GUI-Widget-Registerkarten oder die Registerkarten im Terminalstil im GUI-Modus verwenden.
Es funktioniert auch im reinen tty-Modus Vim, wenn Sie set mouse=a
ein geeignetes Terminal haben und haben (xterm und die meisten Emulatoren davon, wie gnome-terminal, Terminal.app, iTerm2 und PuTTY / KiTTY, um eine Ansicht zu benennen). Beachten Sie, dass auch Mausklicks über Spalte 222 hinaus erforderlich sind set ttymouse=sgr
. siehe In Vim, warum funktioniert meine Maus nicht über die 220. Spalte hinaus? für den Hintergrund dazu.
Ich habe ein Plugin namens vim-tabber geschrieben , das einige zusätzliche Funktionen zum Vertauschen, Verschieben und Verschieben von Registerkarten bietet und die Funktionen der integrierten Befehle zur Manipulation von Registerkarten erweitert, während es weitgehend mit den integrierten Funktionen kompatibel bleibt. Selbst wenn Sie das Plugin nicht verwenden, finden Sie in der README-Datei einige allgemeine Informationen zur Verwendung von Registerkarten.
Aus irgendeinem Grund funktionierte die Funktionsantwort bei mir nicht mehr. Ich vermute einen Konflikt mit vim-ctrlspace . Unabhängig davon ist die Mathematik in der Funktionsantwort nicht erforderlich, da Vim die Registerkarten mit integrierten Funktionen nach links und rechts verschieben kann. Wir müssen uns nur um den Verpackungskoffer kümmern , da Vim nicht benutzerfreundlich ist.
" 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
und +tabm
in meinem vim 7.4 verschieben Tabs nicht richtig. Auch my :help tabm
listet dies nicht als gültige Syntax auf. So ersetzen ich die letzte else execute ...endif
mit elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
mit Pablos Antwort
tabmove
und das -
/ +
-Zeichen in der execute
Zeile umgekehrt .
Hier ist mein Makro mit relativen Argumenten aus der Antwort von @ 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>
Es behandelt den Verpackungskoffer.