2012-10-15 68 views
8

我想停止Vim滚动(如果这是正确的话)当我水平分割窗口。如何防止Vim在分割窗口时滚动?

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

当我水平分割窗口时,会滚动原始窗口,以便在窗口顶部和光标所在的线之间显示scrolloff行 - 如果有多于scrolloff行在窗口顶部和光标行之间 - 即使不需要滚动。换句话说,如果光标在分割窗口时位于第1,2,3,4或5行,原始窗口不会“移动”(良好)。但是如果光标位于第6行,则窗口会滚动,以便第2行成为最顶端的可见行......确保scrolloff行(4)在光标行上方可见(烦人)。同样,如果光标在分割窗口时位于第7行,则原始窗口将滚动到该行,第3行将变为最顶端的可见行。等等。

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

我想有可能将<C-W>s映射到做我想做的功能,但如果可能的话,我宁愿通过配置来解决这个问题。

+0

是不是滚动的直接影响? – romainl

+0

即使'scrolloff'为0(即从未设置),它也会发生。另外'scrolloff'应该是保持在光标上方/下方的最小行数,而不是确切的数字。 –

+0

您可以'设置滚动= 999',这通常用于保持当前行在窗口的中间。它似乎解决了你的问题,但它可能会超级烦人。 – romainl

回答

5

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

在我.vimrc我:

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

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

+0

这是我现在使用的解决方案,但使用':wincmd s'时,我必须在Chromebook上执行这个操作,因为''会尝试关闭窗口,但我仍然遇到令人讨厌的更改。此外,当这个工作,'',屏幕会闪烁,而较旧的vim设置工作正常。我认为有一个很难找到或无证的设置可以解决这个问题,除非它是一个合法的vim错误。 – redbmk

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添加到新打开的分割上,使得新窗口上的光标更易于捕捉。我的大脑可以自动对焦到新分割的中央行。

相关问题