在Vim中以垂直分割的方式打开一个缓冲区。

196

如果你正在Vim中编辑一个文件,然后需要打开一个已存在的缓冲区(例如,从缓冲区列表中::buffers),你如何以垂直分割的方式打开它?

我知道你已经可以用普通分割的方式打开它:

:sbuffer N

其中N是您想要的缓冲区号码。不过,以上命令会将N的缓冲区横向打开,而非纵向。

我也知道您可以在打开后更改窗口位置,并像这样进行垂直分割

Ctrl + W, H
Ctrl + W, L

这将窗口垂直地分割到右侧或左侧。

对我而言,如果有sbuffer,那么就应该有vsbuffer,但是这并不存在(至少我没有意识到)。

此外,请注意,我并不是在寻找用于解决此问题的插件。我知道有很多插件可以实现这一点。

我相信我可能错过了已经存在的某些东西。

我创建了一个简单的函数映射,以便其他人遇到此问题时无需安装插件:

函数:

" 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
6个回答

229

尝试:

:vert sb N

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

另一方面,要打开向右的分割:

:vert belowright sb N

5
没有"vsbuffer N"似乎相当奇怪,很烦人。你的回答解决了这个问题。谢谢! - alfredodeza
13
我总觉得应该也有一个 vsbuffer,并且我经常忘记使用 Ctrl-w T 以在新标签页中打开缓冲区(或者我想要用一个当前不活跃或不可见的缓冲区来做到这一点)。因此,你可以使用一个命令栏来替代其中任何一个情况,我发现这比 @Jeet 的有效答案更容易记住::vsp | b N:tabe | b N - ches
我喜欢这个命令允许自动完成“N”(这似乎不可能使用其他答案中的命令)。两个都点赞了,不过。 - David Rivers

134

:vsp | b1

其中1代表某个缓冲区编号。使用buffers命令列出所有缓冲区。

如果您感兴趣,这里有一些关于分屏的额外信息。 链接


10
你也可以使用:ls,它似乎是:buffers的快捷方式。 - dskecse
4
你也可以使用 :vsp | b <buffer name> 命令,意思是在垂直分割窗口中打开指定名称的缓冲区。 - Kenny Bambridge
4
更好的是,你只需要输入缓冲区名称的一部分(区分大小写),然后按Tab键来循环浏览过滤列表。 - icc97
请注意,尽管@Jerinaw提供的链接很好,但该页面上的术语严重误导,因此您需要阅读该页面上的评论以进行澄清。 - NeilG

11
我发现最有用的答案在Jerinaw和他的评论以及Wolfson的回答中,但我认为这个答案可以更清晰地呈现出来。 (尽管这些回答似乎是最好回答了OP,但它们并没有得到最高的投票。)
关于问题“为什么没有:vsbuffer”,答案是有的,它被称为“:vsplit”并且可以通过以下两种方式来实现:
:vsplit NameOfBuffer 或者
:vsplit #NumberOfBuffer。
(在第二种用法中,请注意井号#的重要性。如果您想获得缓冲区编号3,则需要使用“:vsplit#3”,而不仅仅是“:vsplit 3”,否则它会创建一个名为“3”的新文件。)
再次强调,这个答案已经在上面嵌入了,只是不够明显,对于快速浏览者来说不够清晰。

1
似乎不起作用。它会创建一个带有数字/名称的新文件。 - subtleseeker
当使用NumberOfBuffer,比如说是3,你是否输入了 :vsplit #3?没有#符号, :vsplit 3 将会创建一个名为 3 的新文件?(也就是说,#符号是必须的。) - Danny Quah
是的,你说得对。我无法取消踩或赞。 - subtleseeker
@subtleseeker - 真遗憾。如果您找到了取消踩的方法,请告诉我。 - Danny Quah
@subtleseeker - 我刚刚编辑了答案,强调了刚刚讨论的重点。如果你现在可以撤销你的反对票,请告诉我。 - Danny Quah

7
您可以通过将以下内容添加到您的 .vimrc 文件中来缓解痛苦:
cabbrev vb vert sb

现在,您可以按以下方式使用它。
:vb <buffer>

这很不错,扩展版还提供缓冲区名称自动完成!我之前并不知道cabbrev,谢谢。 - kidpixo

4

您还可以结合列出当前缓冲区的 :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这样的插件,从而节省屏幕空间。

1

你可以像这样使用Neovim

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接