在Vim的zt和zz中间滚动窗口

在Vim的zt和zz中间滚动窗口,vim,scroll,Vim,Scroll,我经常发现自己想要滚动一个Vim窗口,这样我所在的行大约是屏幕的四分之一。它比zt提供了更多的呼吸空间,但比zz显示了更多的代码。当光标位于我想要读取的函数的开头时,它也很有用,但是zt会切断类似Javadoc的注释 有什么魔法可以让我这么做吗?恐怕我一点也不懂Vim的脚本编写。也许设置scrolloff=5(或者您希望光标上方和下方有多少行)可以帮您解决这个问题。这不完全是你想要的,但足够近了吗?你可以使用: nnoremap <expr> zT 'zt' . winheight(

我经常发现自己想要滚动一个Vim窗口,这样我所在的行大约是屏幕的四分之一。它比zt提供了更多的呼吸空间,但比zz显示了更多的代码。当光标位于我想要读取的函数的开头时,它也很有用,但是zt会切断类似Javadoc的注释


有什么魔法可以让我这么做吗?恐怕我一点也不懂Vim的脚本编写。

也许
设置scrolloff=5
(或者您希望光标上方和下方有多少行)可以帮您解决这个问题。这不完全是你想要的,但足够近了吗?

你可以使用:

nnoremap <expr> zT 'zt' . winheight(0)/4 . '<c-y>'
nnoremap <expr> zB 'zb' . winheight(0)/4 . '<c-e>'
nnoremap zT'zT'。winheight(0)/4.“
nnoremap zB'zB'。winheight(0)/4.“

这将重新映射zT到zT,然后是当前窗口高度的四分之一和CTRL-Y(向上滚动一行,将光标留在原来的位置)。

这是我要求的更准确的结果,但是命令的组合会产生令人不快的抖动。@XiongChiamiov我想如果你为那些不熟悉滚动的人设置lazyredraw,它可以有效地防止你的光标滚动到屏幕的顶部或底部
x
行中,你可能会摆脱这种情况。因此,当光标从屏幕顶部而不是顶部点击
x
行时,您开始滚动。顺便说一句,这是我喜欢的行为,所以我对这个解决方案很满意。