Answers:
您可以: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.
我有两个键绑定,可将当前选项卡向左或向右移动。非常便利!
编辑:这是我的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)。
除了其他答案中的建议以外,如果启用了鼠标支持,您还可以简单地用鼠标拖动选项卡来移动它们。
在MacVim和其他GUI vim实现中,默认情况下处于启用状态,无论是在GUI模式下使用GUI窗口小部件选项卡还是终端样式选项卡。
如果您拥有set mouse=a
一个合适的终端(它的xterm及其大多数仿真器,例如gnome-terminal,Terminal.app,iTerm2和PuTTY / KiTTY,可以命名一个视图),它也可以在纯tty模式的Vim中工作。请注意,还需要在222列之外单击鼠标set ttymouse=sgr
。参见在Vim中,为什么我的鼠标不能在第220列上工作?作为背景。
我编写了一个名为vim-tabber的插件,该插件提供了一些附加功能,用于围绕选项卡交换,移动选项卡并增加内置选项卡操作命令的功能,同时仍与内置功能保持高度兼容。即使您选择不使用插件,自述文件中也有一些常规的标签用法信息。
由于某种原因,功能答案对我来说不再起作用。我怀疑与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>
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>
它处理包装盒。