【问题标题】:vim >> rotate through all buffers opened in target splitvim >> 在目标拆分中打开的所有缓冲区中旋转
【发布时间】:2014-06-30 14:27:33
【问题描述】:

我习惯于 IDE 样式的选项卡式面板,并且在尝试使用缓冲区和拆分复制此功能时,使用 vim 遇到了一些 arggghh 诱导场景。

我有以下相关的 .vimrc 设置:

set hidden
set switchbuf=useopen,usetab

现在,假设我打开 4 个缓冲区,先垂直拆分然后水平拆分,这样 1 个缓冲区显示在左侧,2 个缓冲区堆叠显示在右侧。第 4 个缓冲区被隐藏(在左侧拆分中打开)。

光标在左分割,使用 :bnext 和 :bprevious 旋转通过左分割中的所有个缓冲区;这是不可取的,因为我真的没有用在 2 个不同的拆分中查看相同的文件内容(有没有办法选择加入 vim 克隆缓冲区的影响?)。使用 :sbnext 和 :sbprevious 非常适合 visible 缓冲区,但是一旦遇到隐藏缓冲区,它就会在新的拆分中打开,从而对我的布局造成严重破坏。当使用 10 多个缓冲区时,问题会变得更糟。

理想情况下,我希望在给定拆分(即 打开缓冲区的位置)内旋转所有可见和隐藏的缓冲区。

建议表示赞赏。

附言现在正在试用 vim ctrl-space 插件,非常好,但没有解决上述问题。

谢谢

【问题讨论】:

    标签: vim split rotation buffer hidden


    【解决方案1】:

    当您可以通过:buffer 命令直接转到所需的缓冲区时,为什么要在缓冲区中旋转?

    :b foo
    

    :b 采用缓冲区编号或部分文件名(也带有 glob!)。我推荐部分文件名方法。您还可以使用制表符补全来区分不明确的部分文件名。

    您可以以相同的方式使用:sbuffer(简称:sb),但改为打开拆分。

    如需更多帮助,请参阅:

    :h :b
    :h :sb
    

    【讨论】:

    • 当然,这行得通。在 IDE 中使用 20 个选项卡,全部可见,因此无需上下文切换到灰质来查询您需要编辑的文件名称,您只需知道它在面板 X 中的位置标签栏或热键在打开的文件中旋转(打开文件的位置)。必须是 vim 的方式,杂耍文件名,更喜欢在视觉上旋转通过缓冲区,其中的内容代表文件是什么(而不是它的名字)。
    • 我明白你的意思,但我使用许多打开的缓冲区(有时超过 100 个)。使用标签根本不适合我。相反,我使用:b、ctags/cscope、projectionist、大写字母标记、:vimgrep/:grep/:Ggrep/:Ack'<c-6>。我还敢打赌,在 20 个标签中旋转是相当不方便的。由于您正在按内容查找文件,我建议将 ctags/cscope 和 :vimgrep 作为开始的好地方。但是,如果您被绑定并决心在缓冲区中旋转,那么我建议您将 :bn:bp 映射到方便的地方
    • 我已经映射了 :bn, :bp,缺少的部分是可预测性。不幸的是,拆分给人一种 IDE 样式选项卡式布局的错觉,同时完全提供了其他东西。编辑是 vim 的强项,WM 肯定不是。
    • 对于那些来自以 GUI 窗口/选项卡为中心的工作流的人来说,使用更以缓冲区为中心的工作流可能会让人费解。 Vim 只是不同,因此工作流程也会不同。我建议您尝试以缓冲区为中心的工作流程几天。尝试只使用 2 个拆分,忘记使用 vim 的选项卡。使用:b、ctags、<c-o><c-6>、大写标记、:ls:vimgrep,也许还有一些像CtrlP这样的模糊查找器。忘记其他编辑器的窗口和选项卡。保持你的布局简单,因为你一次只能在脑海中保留这么多东西。记住 Vim 是不同的
    【解决方案2】:

    基本的导航单元是缓冲区。窗口和标签页是构建在顶部缓冲区的抽象,它们引入了它们自己的好坏特性,并且在大多数情况下不能很好地与传统缓冲区配合使用。

    您遇到了麻烦,因为您试图将缓冲区命令应用于以窗口为中心的工作流。

    一旦您将工作区拆分为多个窗口,您就必须使用窗口命令进行导航,并且一旦您使用标签页,标签导航就成为您的标准。正如您所注意到的,不仅很难(不可能,AFAIK)使缓冲区导航窗口/选项卡感知,而且替代技术实际上在功能方面缺乏相当多的能力。

    第 4 个缓冲区被隐藏(在左侧拆分处打开)。

    这是您的第一个问题:第四个缓冲区是隐藏的,因此是暂时的。它不在任何窗口中打开,可以在任何窗口中显示。您可以选择在特定窗口中显示特定缓冲区,但不能真正将其“固定”到该窗口。

    光标在左拆分,使用:bnext和:bprevious在左拆分的所有缓冲区中旋转;这是不可取的,因为我真的没有用在 2 个不同的拆分中查看相同的文件内容(有没有办法选择加入 vim 克隆缓冲区的影响?)。

    同样,您正在使用完全不关心窗口和标签页的缓冲区命令。

    使用 :sbnext 和 :sbprevious 对可见缓冲区非常有效,但一旦遇到隐藏缓冲区,它就会在新的拆分中打开,从而对我的布局造成严重破坏。

    再一次,错误的工作工具。

    可以保留与窗口一样多的窗口本地参数列表,并将这些列表与:next:previous 一起使用,但这需要相当多的关注和预想。也许有一个插件?无论如何:

    1. 创建你的布局:

      :vs|sp
      
    2. 回到左边的大窗口:

      <C-w>w
      
    3. 将两个文件放在本地参数列表中:

      :arglocal aaa.txt bbb.txt
      
    4. 移动到下一个窗口,编辑本地参数列表并重复:

      <C-w>w
      :arglocal ccc.txt ddd.txt
      <C-w>w
      :arglocal eee.txt fff.txt
      
    5. 您现在可以通过:next:previous 切换参数或通过&lt;C-^&gt; 切换到备用文件。

    请注意,虽然您能够以某种方式将缓冲区“强制”到特定窗口,但您现在在导航方面受到严重限制并且您现在必须处理多维结构相当脆弱,需要太多脑细胞。

    您应该考虑使用 Vim,而不是通过尽可能使用直接缓冲区来反对它。

    【讨论】:

      【解决方案3】:

      我正在使用vim dwm plugin,它非常适合我的工作流程。我习惯在同一个窗口中打开很多缓冲区。有了这个插件,我可以轻松管理所有这些。我也在使用vim-ctrlspace plugin,这两个插件可以很好地协同工作。嗯,就是这样。希望对您有所帮助!

      【讨论】:

      • 同意,vim ctrlspace 太棒了 ;-)
      猜你喜欢
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-12
      • 2012-05-29
      • 2011-03-02
      • 1970-01-01
      相关资源
      最近更新 更多