如何在 Vim 中滚动(移动屏幕 up/down 而光标保持固定在同一屏幕位置)

How to scroll (move screen up/down while cursor remains fixed at same screen position) in Vim

在网页上正常滚动时,光标保持在屏幕上的同一位置,同时屏幕平滑移动up/down。我想在 vim 中复制该功能。 Ctrl-YCtrl-E移动屏幕但光标不会停留在屏幕上的同一位置,而是停留在同一行。

到目前为止,唯一接近的是Ctrl-UCtrl -D,但这会按行滚动屏幕一半的值。这不会启用平滑滚动。

有内置命令吗?

答案后添加的解决方案: 不,没有默认的方法来做到这一点。但是有这些方便的映射:

nnoremap <C-K> k<C-Y>

nnoremap <C-J> j<C-E>

'scroll'选项决定Ctrl-UCtrl-D滚动的行数。 0默认为"half a screen";但如果你

:set scr=1

那么这些命令只会让你移动一行。 (您可以使用 :set scr=0 恢复默认值。)

请注意,'scroll' 选项是通过在 Ctrl-UCtrl-D 前加上计数自动设置的。 IE。如果你做 1Ctrl-D,每隔 Ctrl-UCtrl -D 只会移动一行,直到 'scroll' 被重置。

另一种可能性是'scrolloff',它确定window中光标上方和下方的最小行数。将它设置为一个荒谬的数字将确保您的光标始终位于屏幕中央。也就是说,

:set so=999

实际上会将 jk 转换为您想要的。

最后,如果您不喜欢这两种方法的副作用,像 Christian Gibbons 这样的绑定在评论中建议是另一种方法。

由于没有默认方法,我选择使用

nnoremap <C-K> k<C-Y>

nnoremap <C-J> j<C-E>