Is there a vim command to relocate a tab?
You can relocate a tab with :tabm
using either relative or zero-index absolute arguments.
absolute:
- Move tab to position i:
:tabm i
relative:
- Move tab i positions to the right:
:tabm +i
- Move tab i positions to the left:
:tabm -i
It's a relatively new feature. So if it doesn't work try updating your vim.
Do you mean moving the current tab? This works using 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.
I have two key bindings that move my current tab one left or one right. Very handy!
EDIT: Here is my VIM macro. I'm not a big ViM coder, so maybe it could be done better, but that's how it works for 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
After this you can bind keys, for example like this in your .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Now you can move your current tab by pressing F9 or F10.
I was looking for the same and after some posts I found a simpler way than a function:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
The tabpagenr() returns the actual tab position, and tabmove uses indexes.
I mapped the right to Ctrl+L and the left to Ctrl+H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>