【问题标题】:Open a buffer as a vertical split in VIM在 VIM 中打开缓冲区作为垂直拆分
【发布时间】:2011-06-02 01:43:47
【问题描述】:

如果您在 VIM 中编辑文件,然后需要打开现有缓冲区(例如,从缓冲区列表中::buffers)如何以垂直拆分方式打开它?

我知道您已经可以使用 normal 拆分打开它,例如:

: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

【问题讨论】:

    标签: vim


    【解决方案1】:

    我发现对 OP 最有用的答案深深嵌入 Jerinaw 的答案和对其的评论以及 Wolfson 的答案中。但我觉得它可能会被带出更多。 (这些也没有得到最高的投票,尽管在我看来他们是回答 OP 最好的。)

    为什么没有:vsbuffer这个问题的答案是有。它被称为:vsplit 并且可以作为

    :vsplit NameOfBuffer

    :vsplit #NumberOfBuffer.

    (在第二次使用中,请注意哈希 # 很重要。如果要到达缓冲区号 3,则需要说 :vsplit #3,而不仅仅是 :vsplit 3,它将创建一个新文件命名为“3”。)

    同样,这个答案嵌入在上面,只是对于快速扫描仪 IMV 来说不够清晰。

    【讨论】:

    • 似乎不起作用。它使用数字/名称创建一个新文件。
    • 在使用 NumberOfBuffer 的时候,说是 3,你输入:vsplit #3了吗?如果没有哈希,:vsplit 3 确实会创建一个名为 3 的新文件? (即需要哈希。)
    • 是的,你是对的。我无法删除反对票或赞成票。
    • @subtleseeker - 太糟糕了。让我知道您是否找到了删除反对票的方法。
    • @subtleseeker - 我刚刚编辑了答案以强调刚刚讨论的要点。让我知道您现在是否可以删除您的反对票。
    【解决方案2】:

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

    1. 当前窗口::b &lt;N/bufname&gt;
    2. 垂直分割::vsp | b &lt;N/bufname&gt;
    3. 水平分割::sp | b &lt;N/bufname&gt;

    为此,我在~/.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. &lt;leader&gt;b
    2. &lt;leader&gt;v
    3. &lt;leader&gt;s

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

    我将&lt;leader&gt;映射到,基于

    let mapleader = ","
    

    对于某些人(例如我)来说,这甚至可以取代 MiniBufExpl 之类的插件,从而节省屏幕空间。

    【讨论】:

      【解决方案3】:

      您可以通过将以下内容添加到您的 .vimrc 来缓解您的痛苦

      cabbrev vb vert sb
      

      现在您可以通过以下方式使用它。

      :vb <buffer>
      

      【讨论】:

      • 这很好,扩展版本还提供缓冲区名称自动完成功能!我也不知道 cabbrev,谢谢。
      【解决方案4】:

      你可以像这样使用 Neovim:

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

      【讨论】:

        【解决方案5】:

        :vsp | b1

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

        如果您有兴趣,这里有一些关于拆分的附加信息。 Link

        【讨论】:

        • 你也可以使用:ls,这似乎是:buffers的快捷方式。
        • 你也可以:vsp | b &lt;buffer name&gt;
        • @KennyBambridge 更好 - 您只需输入部分缓冲区名称(区分大小写),然后按 Tab 键循环浏览过滤列表
        • 请记住,尽管@Jerinaw 提供的Link 很好,但该页面上的术语具有严重误导性,因此您还需要阅读该页面上的 cmets 以进行澄清。跨度>
        【解决方案6】:

        试试:

        :vert sb N
        

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

        另一方面,要向右打开一个拆分:

        :vert belowright sb N
        

        【讨论】:

        • 没有vsbuffer N 不是很奇怪吗?恼人的。你的回答很到位。谢谢!
        • 我总是觉得应该有一个vsbuffer,而且我也经常忘记Ctrl-w T 在新选项卡中打开一个缓冲区(或者我想用一个当前不存在的缓冲区来做到这一点活跃或可见)。因此,作为替代方案,您可以在这两种情况下使用条形图,我发现它比@Jeet 的有效答案更容易记住::vsp | b N:tabe | b N
        • 我喜欢这个命令允许 N 自动完成(这在其他答案中的命令似乎是不可能的)。尽管如此,两人都投了赞成票。
        猜你喜欢
        • 2011-03-24
        • 2013-12-08
        • 2016-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-21
        • 1970-01-01
        相关资源
        最近更新 更多