移动相邻的标签进行拆分?

mhi*_*tza 37 vim

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

在环顾四周的时候,我找到了一个邮件列表讨论,有人说这是与操作Ctrl+ 相反的W,T没有提供解决方案.

rom*_*inl 42

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

更有意义的是"将缓冲区x显示为拆分",可以完成

:sb <name_of_buffer>
Run Code Online (Sandbox Code Playgroud)

  • @malan 晚了一年多,但对于未来的读者来说,可以使用 `:vert sb &lt;buffer_name&gt;` 进行垂直分割 (2认同)

Tha*_*ish 8

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

:Tabmerge
Run Code Online (Sandbox Code Playgroud)

您将两个选项卡合并为一个,水平分割并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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)