在VIM中打开缓冲区作为垂直拆分


179

如果要在VIM中编辑文件,则需要打开一个现有缓冲区(例如,从缓冲区列表中:),:buffers如何在垂直分割中打开它?

我知道您已经可以使用常规拆分将其打开,例如:

:sbuffer N

这里N是您想要的缓冲区编号,但是,上面的代码是N水平而不是垂直打开的。

我还知道,您可以在打开后更改窗口的位置,并进行如下所示的“垂直拆分”:

Ctrl-W H
Ctrl-W L

它将在垂直方向上向右或向左拆分窗口。

在我看来,如果有一个sbuffer应该有一个vsbuffer但不存在(我不知道)

另外,请注意,我不是在寻找可解决此问题的插件。我知道有很多可以让您执行此操作的插件。

我确信我可能会丢失一些已经存在的东西。

编辑:本着最好的协作精神,如果其他人偶然发现了此问题并且不想安装插件,我已经用Mapping创建了一个简单的Function:

功能:

" Vertical Split Buffer Function
function VerticalSplitBuffer(buffer)
    execute "vert belowright sb" a:buffer 
endfunction

对应:

" Vertical Split Buffer Mapping
command -nargs=1 Vbuffer call VerticalSplitBuffer(<f-args>)

这样就完成了按右分割打开缓冲区的任务,因此对于缓冲区1,您可以这样称呼它:

:Vbuffer 1

Answers:


209

尝试:

:vert sb N

这将打开一个左垂直分割线(默认情况下,除非您已修改某些选项)。

另一方面,要打开右侧的拆分,请执行以下操作:

:vert belowright sb N

5
没有似乎不是很奇怪vsbuffer N吗?烦死了 您的答案是正确的。谢谢!
alfredodeza,2010年

13
我总是觉得应该有一个vsbuffer,而且我也常常忘记Ctrl-w T在新标签页中打开一个缓冲区(或者我想使用当前不活动或不可见的缓冲区来打开它)。因此,您也可以在上述两种情况下都使用一个小节,我发现它比@Jeet的有效答案::vsp | b N和更容易记住:tabe | b N
CHES

我喜欢这个命令可以N自动完成(其他答案中的命令似乎不可能)。尽管如此,双方都赞成。
David Rivers

125

:vsp | b1

1是一些缓冲区号。使用buffers列出所有缓冲区。

如果您有兴趣,这里有一些关于分割的其他信息。 链接


9
您也可以使用:ls,这似乎是的捷径:buffers
dskecse 2014年

3
您也可以这样做:vsp | b <buffer name>
肯尼·班布里奇

4
@KennyBambridge甚至更好-您只需要键入缓冲区名称的一部分(区分大小写),然后单击制表符即可循环浏览已过滤列表
icc97

请记住,尽管@Jerinaw提供的链接很好,但是该页面上的术语严重误导您,因此您还需要阅读该页面上的注释以进行澄清。
NeilG

5

您可以通过在.vimrc中添加以下内容来减轻痛苦

cabbrev vb vert sb

现在,您可以按以下方式使用它。

:vb <buffer>

很好,扩展版本还提供了缓冲区名称自动补全功能!我也不知道Cabbrev,谢谢。
kidpixo

2

您还可以将:ls列出当前缓冲区的命令和用于打开所需缓冲区的命令组合在一起

  1. 当前窗口: :b <N/bufname>
  2. 垂直分割: :vsp | b <N/bufname>
  3. 水平分割: :sp | b <N/bufname>

为此,我向我添加了以下映射~/.vimrc(映射的顺序代表了所需窗口的上面的列表)

 nnoremap <leader>b :ls<cr>:b<space>
 nnoremap <leader>v :ls<cr>:vsp<space>\|<space>b<space>
 nnoremap <leader>s :ls<cr>:sp<space>\|<space>b<space>

基于此,您可以在点击后立即看到缓冲区列表

  1. <leader>b
  2. <leader>v
  3. <leader>s

然后只需输入所需的缓冲区号N。然后将在所需窗口中打开缓冲区。当然,您仍然可以使用缓冲区名称的一部分bufname

我根据映射<leader>,

let mapleader = ","

对于某些人(例如我),它甚至可以替换MiniBufExpl之类的插件,从而节省屏幕空间。


0

您可以使用Neovim,如下所示:

autocmd FileType python nmap <F5> :rightbelow vertical split <bar> :term python %<cr>

0

我发现最有用的OP答案深深地嵌入在Jerinaw的答案和对此的评论以及Wolfson的答案中。但是我觉得它可能会更多。(即使在我看来,那些人对OP的回答最好,也没有获得最高的投票。)

问题“为什么不存在”的答案是存在:vsbuffer。它被称为:vsplit并完成窍门

:vsplit NameOfBuffer

要么

:vsplit #NumberOfBuffer

同样,此答案已嵌入上方,对于快速扫描仪IMV来说,答案还不够清楚。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.