【发布时间】: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