拆分窗口时如何防止Vim滚动?

时间:2012-10-15 14:02:03

标签: vim

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

假设我在Vim中编辑了10行文件。我在缓冲区有一个窗口,窗口高40行。两个窗户有足够的空间,一个在另一个的顶部,两个都显示整个缓冲区。我们假设scrolloff设置为4。

当我水平分割窗口时,滚动原始窗口,以便在窗口顶部和光标所在的行之间显示正好scrolloff行 - 如果超过{{1}窗口顶部和光标线之间的线 - 即使不需要滚动。

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

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

我想我可以将scrolloff映射到一个能够满足我想要的功能,但如果可能的话,我更愿意通过配置来解决这个问题。

3 个答案:

答案 0 :(得分:5)

我找到了一个解决方案,借用here的答案。

.vimrc我有:

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

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

答案 1 :(得分: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添加到新打开的分割上,以使新窗口上的光标更容易捕获。我的大脑可以自动聚焦到新分裂的中心行。

答案 2 :(得分:0)

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