43

有没有一种简单的方法可以将 Vim 中的相邻选项卡作为拆分移动到当前窗口?

环顾四周时,我遇到了一个邮件列表讨论,有人说这是Ctrl+操作的反面WT但没有提供解决方案。

4

2 回答 2

51

您的问题的问题是选项卡未绑定到特定缓冲区。您可以在一个选项卡中拥有 10 个具有尽可能多的缓冲区的窗口,因此“将选项卡移动到拆分中”没有多大意义。

更有意义的是“将缓冲区 x 显示为一个拆分”,这可以通过

:sb <name_of_buffer>
于 2013-02-04T14:56:34.103 回答
9

我提供了两个解决方案,第一个是我自己检查的,我可以保证它可以正常工作。第二个,我很快就会尝试。第一个解决方案:通过简单地创建文件夹并将文件下载到文件夹中来
安装这个插件http://www.vim.org/scripts/script.php?script_id=1961。然后,当您有两个选项卡并键入~/.vim/pluginTabmerge.vim

:Tabmerge

您将两个选项卡合并为一个,水平拆分并top对齐。查看链接以找到完整的使用指南。

或者,查看此页面http://vim.wikia.com/wiki/Move_current_window_between_tabs以获取在选项卡之间移动当前窗口的两个函数的代码。这里的功能(我还没有尝试过):

function MoveToPrevTab()
  "there is only one window
  if tabpagenr('$') == 1 && winnr('$') == 1
    return
  endif
  "preparing new window
  let l:tab_nr = tabpagenr('$')
  let l:cur_buf = bufnr('%')
  if tabpagenr() != 1
    close!
    if l:tab_nr == tabpagenr('$')
      tabprev
    endif
    sp
  else
    close!
    exe "0tabnew"
  endif
  "opening current buffer in new window
  exe "b".l:cur_buf
endfunc

function MoveToNextTab()
  "there is only one window
  if tabpagenr('$') == 1 && winnr('$') == 1
    return
  endif
  "preparing new window
  let l:tab_nr = tabpagenr('$')
  let l:cur_buf = bufnr('%')
  if tabpagenr() < tab_nr
    close!
    if l:tab_nr == tabpagenr('$')
      tabnext
    endif
    sp
  else
    close!
    tabnew
  endif
  "opening current buffer in new window
  exe "b".l:cur_buf
endfunc
于 2013-02-04T14:54:01.443 回答