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

时间:2011-09-13 18:41:13

标签: vim

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

这可能在vim中吗?你是怎么做到的?

5 个答案:

答案 0 :(得分:48)

这将使当前行居中

zz

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

:set scrolloff=999

答案 1 :(得分: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

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

答案 2 :(得分:6)

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

:set so=999

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

:set so=0

如果你在那些之间进行切换,你可以创建一个快速切换的映射:

:nnoremap <Leader>ts :let &scrolloff=999-&scrolloff<CR> " ToggleScrolloff

答案 3 :(得分:2)

你必须按两次z,如: ZZ

答案 4 :(得分:0)

scrolllfix.vim插件很适合这个。这就是我使用的,它就像一个魅力。你可以在github上找到它here.

使用scrollfix插件可以精确控制光标固定的位置(沿缓冲区垂直)。默认情况下,它位于顶部缓冲区的60%,但这是可自定义的。这会影响光标在正常和插入模式下的位置。