Réponses:
Vous pouvez déplacer un onglet en :tabm
utilisant des arguments absolus relatifs ou à index zéro.
absolu:
:tabm i
relatif:
:tabm +i
:tabm -i
C'est une fonctionnalité relativement nouvelle. Donc, si cela ne fonctionne pas, essayez de mettre à jour votre vim.
:tabm
accepte les arguments relatifs dans vim 7.3.
Voulez-vous dire déplacer l'onglet actuel? Cela fonctionne en utilisant 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.
J'ai deux raccourcis clavier qui déplacent mon onglet actuel vers la gauche ou vers la droite. Très utile!
EDIT: Voici ma macro VIM. Je ne suis pas un gros codeur ViM , alors peut-être que cela pourrait être mieux, mais c'est comme ça que ça fonctionne pour moi:
" 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
Après cela, vous pouvez lier des clés, par exemple comme ceci dans votre .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Vous pouvez maintenant déplacer votre onglet actuel en appuyant sur F9 ou F10.
Je cherchais la même chose et après quelques articles, j'ai trouvé un moyen plus simple qu'une fonction:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Le tabpagenr () retourne la position de l' onglet réelle et tabmove utilise des index.
J'ai mappé la droite sur Ctrl + L et la gauche sur Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
pour me déplacer vers la droite. Pour MacVim 8.0.1420 (144) .
:tabm n
Où n
est un nombre indiquant la position (à partir de zéro)
Je pense qu'une meilleure solution consiste à déplacer l'onglet vers la gauche ou la droite vers sa position actuelle au lieu de déterminer la valeur numérique de la nouvelle position dans laquelle vous le souhaitez.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Avec les keymaps ci-dessus, vous pourrez déplacer l'onglet actuel:
En plus des suggestions fines dans d'autres réponses, vous pouvez également simplement faire glisser les onglets avec la souris pour les déplacer, si la prise en charge de la souris est activée.
Ceci est activé par défaut dans MacVim et d'autres implémentations de GUI vim, que ce soit en utilisant les onglets de widget GUI ou les onglets de style de terminal en mode GUI.
Il fonctionne également en mode pur tty Vim, si vous avez set mouse=a
et avez un terminal approprié (xterm et la plupart des émulateurs de celui-ci, tels que gnome-terminal, Terminal.app, iTerm2 et PuTTY / KiTTY, pour nommer une vue). Notez que les clics de souris au-delà de la colonne 222 nécessitent également set ttymouse=sgr
; voir Dans Vim, pourquoi ma souris ne fonctionne-t-elle pas au-delà de la 220e colonne? pour le fond à ce sujet.
J'ai écrit un plugin appelé vim-tabber qui fournit des fonctionnalités supplémentaires pour permuter les onglets, les déplacer et ajouter aux capacités des commandes de manipulation des onglets intégrées, tout en restant largement compatible avec les commandes intégrées. Même si vous choisissez de ne pas utiliser le plugin, le README contient des informations générales sur l'utilisation des onglets.
Pour une raison quelconque, la réponse de la fonction a cessé de fonctionner pour moi. Je soupçonne un conflit avec vim-ctrlspace . Quoi qu'il en soit, les calculs dans la réponse de la fonction ne sont pas nécessaires, car Vim peut déplacer les onglets vers la gauche et la droite avec des fonctions intégrées. Nous avons juste à gérer le boîtier d'emballage , car Vim n'est pas convivial.
" 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
et +tabm
dans mon vim 7.4 ne déplace pas correctement les onglets. De plus, my :help tabm
ne répertorie pas cela comme une syntaxe valide. J'ai donc remplacé le dernier else execute ...endif
en elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
utilisant la réponse de Pablo
tabmove
et le signe -
/ +
dans la execute
ligne.
Voici ma macro, en utilisant les arguments relatifs de la réponse de @ 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>
Il gère le boîtier d'emballage.