Risposte:
È possibile riposizionare una scheda :tabm
utilizzando argomenti assoluti relativi o con indice zero.
assoluto:
:tabm i
parente:
:tabm +i
:tabm -i
È una funzionalità relativamente nuova. Quindi, se non funziona, prova ad aggiornare il tuo VIM.
:tabm
accetta argomenti relativi in Vim 7.3.
Intendi spostare la scheda corrente? Funziona con 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.
Ho due combinazioni di tasti che spostano la mia scheda corrente a sinistra o a destra. Molto maneggevole!
EDIT: ecco la mia macro VIM. Non sono un grande programmatore ViM , quindi forse potrebbe essere fatto meglio, ma è così che funziona per me:
" 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
Dopodiché puoi associare le chiavi, ad esempio così nel tuo .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Ora puoi spostare la scheda corrente premendo F9 o F10.
Stavo cercando lo stesso e dopo alcuni post ho trovato un modo più semplice di una funzione:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Il tabpagenr () restituisce la posizione attuale scheda, e tabmove utilizza gli indici.
Ho mappato la destra su Ctrl + L e la sinistra su Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
per spostarmi a destra. Per MacVim 8.0.1420 (144) .
:tabm n
Dove n
è un numero che indica la posizione (a partire da zero)
Penso che una soluzione migliore sia quella di spostare la scheda a sinistra o a destra nella sua posizione corrente invece di capire il valore numerico della nuova posizione in cui la desideri.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Con le mappe di tasti di cui sopra, sarai in grado di spostare la scheda corrente:
Oltre ai suggerimenti di precisione in altre risposte, puoi anche semplicemente trascinare le schede con il mouse per spostarle, se hai il supporto del mouse abilitato.
Questo è attivo per impostazione predefinita in MacVim e altre implementazioni vim della GUI, sia utilizzando le schede del widget GUI sia le schede di stile del terminale in modalità GUI.
Funziona anche in modalità Vty, se hai set mouse=a
e disponi di un terminale adatto (xterm e la maggior parte degli emulatori, come gnome-terminal, Terminal.app, iTerm2 e PuTTY / KiTTY, per nominare una vista). Si noti che sono necessari anche clic del mouse oltre la colonna 222 set ttymouse=sgr
; vedi In Vim, perché il mio mouse non funziona oltre la 220a colonna? per lo sfondo.
Ho scritto un plug-in chiamato vim-tabber che fornisce alcune funzionalità aggiuntive per scambiare le schede, spostarle e aggiungerle alle capacità dei comandi di manipolazione delle schede incorporate, pur rimanendo ampiamente compatibile con i builtin. Anche se si sceglie di non utilizzare il plug-in, nel README sono presenti alcune informazioni generali sull'utilizzo della scheda.
Per qualche motivo, la risposta alla funzione ha smesso di funzionare per me. Sospetto un conflitto con vim-ctrlspace . Indipendentemente da ciò, la matematica nella risposta della funzione non è necessaria, poiché Vim può spostare le schede a destra e sinistra con le funzioni integrate. Dobbiamo solo gestire la custodia , perché Vim non è facile da usare.
" 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
e +tabm
nel mio vim 7.4 non spostano correttamente le schede. Inoltre my :help tabm
non elenca questo come una sintassi valida. Quindi ho sostituito l'ultimo else execute ...endif
con l' elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
uso della risposta di Pablo
tabmove
e il segno -
/ +
nella execute
riga.
Ecco la mia macro, usando argomenti relativi dalla risposta di @ 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>
Gestisce la custodia.