【问题标题】:How to prevent Vim scrolling when splitting a window?拆分窗口时如何防止Vim滚动?
【发布时间】:2019-10-10 02:11:41
【问题描述】:

当我水平拆分窗口时,我想阻止 Vim 滚动(如果这是正确的话)。

假设我在 Vim 中编辑了一个 10 行的文件。我在缓冲区上有一个窗口,窗口高 40 行。两个窗口的空间绰绰有余,一个在另一个之上,两个窗口都显示了整个缓冲区。假设scrolloff 设置为 4。

当我水平拆分窗口时,原始窗口会滚动,以便在窗口顶部和光标所在的行之间准确显示scrolloff 行——如果两个行之间的行超过scrolloff窗口顶部和光标线 -- 即使不需要滚动。

换句话说,如果我拆分窗口时光标位于第 1、2、3、4 或 5 行,则原始窗口不会“移动”(很好)。但是,如果光标位于第 6 行,则窗口会滚动,使第 2 行成为最顶部可见行...确保 scrolloff 行 (4) 在光标行上方可见(烦人)。同样,如果当我拆分窗口时光标位于第 7 行,则原始窗口将滚动到第 3 行成为最顶部的可见行。以此类推。

当我水平分割原始窗口时,有没有办法配置 Vim 从不滚动原始窗口?

我想可以将<C-W>s 映射到执行我想要的功能,但如果可能的话,我更愿意通过配置来解决这个问题。

【问题讨论】:

  • 不是scrolloff的直接影响吗?
  • 即使scrolloff 为 0(即从未设置)也会发生这种情况。 scrolloff 也应该是保持在光标上方/下方的最少行数,而不是确切的数字。
  • 您可以使用set scrolloff=999,它通常用于将当前行保持在窗口中间。它似乎可以解决您的问题,但它可能非常烦人。
  • 当您使用set nowrap 垂直分割时它不会滚动(使用set wrap 它可能会滚动,但不会滚动太远)并且它非常有意义,因为行数不会改变。使 vim never 在水平分割上滚动是不可能的,因为行数会改变。你说的“精确滚动到scrolloffset 行”是错误的:水平拆分时,它会尝试保持比例:如果在65 行高的窗口光标在拆分后位于第44 行,它是22 日。如果winline()/2 看起来小于或等于&scrolloffset,那么您将得到您的行为。
  • 我没有意识到 Vim 在水平分割时试图保持比例。这在任何地方都有记录吗?

标签: vim


【解决方案1】:

我找到了解决办法,借用here的答案。

在我的.vimrc 我有:

nnoremap <C-W>s Hmx`` \|:split<CR>`xzt``

现在当我用&lt;C-W&gt;s 水平分割窗口时,原来的窗口根本不滚动。

【讨论】:

  • 这是我现在使用的解决方案,但是当使用 :wincmd s 时,我必须在我的 Chromebook 上执行此操作,因为 &lt;C-W&gt; 会尝试关闭窗口,我仍然会得到烦人的变化.此外,当这确实有效时,使用&lt;C-W&gt;,屏幕将闪烁,而较旧的 vim 设置工作正常。我认为有一个很难找到或未记录的设置可以解决这个问题,除非它是一个合法的 vim 错误。
【解决方案2】:

作为Andy Stewart 的解决方案的替代方案,这是我在.vimrc 中使用的解决方案:

                      (3)          (5)
                      ++          +--+
                      ||          |  |
nnoremap _ Hmx``<C-w>szz<C-w><C-p>`x``<C-w><C-p>
           |   ||    |  |        |    |        |
           +-+-++----+  +--------+    +--------+
            (1)  (2)       (4)            (6)

(1) 转到左上角保存标记到x 并返回到原来的位置。
(2) 创建一个新的拆分。光标将移动到这个新的拆分窗口。
(3) 使用zz 使光标线居中。
(4) 回到你创建分割的窗口。
(5) 回到x 标记,然后回到原来的位置(模拟步骤(1))
(6) 返回您创建的拆分。

我做的一个补充是将zz添加到新打开的拆分中,以使新窗口上的光标更容易捕捉。我的大脑可以自动专注于新拆分的中心行。

【讨论】:

    【解决方案3】:

    最近可用的选项是stable-windows 插件。我试过了,效果很好。

    【讨论】:

    • 只是我还是在缓冲区之间来回切换时不起作用?
    • 在缓冲区之间移动时它对我有用。如果您可以重现问题,我建议您在其 github 页面上为插件提交问题。
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-06
    相关资源
    最近更新 更多