13

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

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

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

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

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

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

4

3 回答 3

6

我找到了一个解决方案,从这里借用了答案。

在我的.vimrc我有:

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

现在,当我用 水平分割窗口时<C-W>s,原始窗口根本不会滚动。

于 2012-10-18T07:17:09.430 回答
4

作为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到新打开的拆分中,以使新窗口上的光标更容易捕捉。我的大脑可以自动专注于新拆分的中心行。

于 2017-08-29T21:34:39.353 回答
4

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

于 2019-10-09T18:11:41.657 回答