在vim中,如何滚动缓冲区以使光标位置在屏幕中居中?

Cor*_*ein 37 vim

在vim中,我经常跳到我做的标记或搜索结果,光标将位于屏幕的最底部或最顶部.此时,为了使屏幕更容易阅读,我想滚动缓冲区,使光标下的文本位于屏幕中间.

这可能在vim?你怎么做呢?

Pet*_*ker 52

这将使当前行居中

zz
Run Code Online (Sandbox Code Playgroud)

您可以选择将其设置scrolloff为大型999工作线,工作线始终位于中心位置,除非您朝向文件的开头或结尾.

:set scrolloff=999
Run Code Online (Sandbox Code Playgroud)

  • 值得知道的是,`z.也有效,我发现输入更快.唯一的区别是`zz`将光标留在位置,而`z.将它移动到第一个非空白字符. (10认同)

ark*_*kod 12

有一种方法可以使光标在EOF附近保持居中.

scrolloff = 999工作正常,除了靠近缓冲区的末端,它没有光标居中,我不知道任何允许scrolloff将光标居中放在缓冲区末端的修复.

scrolloff = 999的替代方法是将导航命令重新映射到光标的中心.我在_vimrc/.vimrc中执行以下操作:

" Avoids updating the screen before commands are completed
set lazyredraw

" Remap navigation commands to center view on cursor using zz
nnoremap <C-U> 11kzz
nnoremap <C-D> 11jzz
nnoremap j jzz
nnoremap k kzz
nnoremap # #zz
nnoremap * *zz
nnoremap n nzz
nnoremap N Nzz
Run Code Online (Sandbox Code Playgroud)

这将使光标一直垂直居中到缓冲区的末尾:)


Mic*_*kis 6

'scrolloff'(滚动偏移)选项确定您希望在光标上方和下方看到的上下文行数.例如,将它设置为5使得在移动/滚动时光标上方和下方始终可见5条线.将'scrolloff'设置为较大的值会导致光标尽可能保留在中间行:

:set so=999
Run Code Online (Sandbox Code Playgroud)

要恢复正常行为,请输入:

:set so=0
Run Code Online (Sandbox Code Playgroud)

如果您在这些之间切换,可以创建一个快速切换的映射:

:nnoremap <Leader>ts :let &scrolloff=999-&scrolloff<CR> " ToggleScrolloff
Run Code Online (Sandbox Code Playgroud)