有没有一个VIM命令来重新定位一个标签?

如何在Vim更改当前标签的位置/顺序? 例如,如果我想重新定位我的当前选项卡作为第一个选项卡?

您可以使用相对索引或零索引绝对参数来重新定位tab :tabm

绝对:

  • 将标签移到位置i :tabm i

相对的:

  • 将标签移动到右侧:tabm +i
  • 将标签移动到左侧:tabm -i

这是一个相对较新的function。 所以,如果它不工作尝试更新你的vim。

你的意思是移动当前标签? 这工作使用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. 

我有两个键绑定移动我的当前标签左或右。 非常便利!

编辑:这是我的VIMmacros。 我不是一个大的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来移动当前标签。

我正在寻找相同的和后一些职位,我发现一个简单的方法比function:

 :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 <CH> :execute "tabmove" tabpagenr() - 2 <CR> map <CJ> :execute "tabmove" tabpagenr() <CR> 

将当前选项卡移至第n 位置

 :tabm n 

其中n是表示位置的数字(从零开始)


将选项卡向左/右移动

我认为更好的解决scheme是将标签左移或右移到当前位置,而不是计算您想要的新位置的数值。

 noremap <A-Left> :-tabmove<cr> noremap <A-Right> :+tabmove<cr> 

使用上面的键盘映射,您可以移动当前选项卡:

  • 在左边使用: Alt + Left
  • 在右边使用: Alt + 右键

除了其他答案中的精彩build议之外,如果您启用了鼠标支持,您还可以简单地拖动鼠标来移动它们。

在MacVim和其他GUI vim实现中,无论是在GUI模式下使用GUI小部件选项卡还是使用terminal样式选项卡,这都是默认的。

它也可以在纯tty模式Vim下运行,如果你set mouse=a并且有一个合适的terminal(xterm和大多数仿真器,比如gnome-temrinal,Terminal.app,iTerm2和PuTTY / KiTTY)来命名一个视图)。 请注意,超出栏222的鼠标点击也需要set ttymouse=sgr ; 请参阅在Vim中,为什么我的鼠标不能通过第220列? 为背景。

我写了一个名为vim-tabber的插件,它提供了一些额外的function来交换标签,移动标签,并添加到内置标签操作命令的function中,同时与内置标签基本保持兼容。 即使您select不使用该插件,自述文件中也有一些常规选项卡使用信息。

出于某种原因,函数的答案停止为我工作。 我怀疑与vim-ctrlspace有冲突。 无论如何,function答案中的mathalgorithm是不必要的,因为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 <DH> :call TabMove(-1)<CR> map <DL> :call TabMove(1)<CR>