当我水平分割窗口时,我想阻止Vim滚动(如果这是正确的词)。
假设我在Vim中编辑了10行文件。我在缓冲区有一个窗口,窗口高40行。两个窗户有足够的空间,一个在另一个的顶部,两个都显示整个缓冲区。我们假设scrolloff
设置为4。
当我水平分割窗口时,滚动原始窗口,以便在窗口顶部和光标所在的行之间显示正好scrolloff
行 - 如果超过{{1}窗口顶部和光标线之间的线 - 即使不需要滚动。
换句话说,如果当我分割窗口时光标位于第1,2,3,4或5行,则原始窗口不会“移动”(好)。但是如果光标位于第6行,则窗口会滚动,以便第2行成为最顶部的可见行......确保{(1}}行(4)在光标线上方可见(烦人)。类似地,如果当我分割窗口时光标在第7行上,则原始窗口滚动到该行3成为最顶部的可见行。等等。
当我将Vim水平分割时,有没有办法配置Vim从不滚动原始窗口?
我想我可以将scrolloff
映射到一个能够满足我想要的功能,但如果可能的话,我更愿意通过配置来解决这个问题。
答案 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插件。我已经尝试过了,并且效果很好。