始终将光标保持在Vim的中心位置

时间:2012-11-15 13:38:46

标签: vim

我想随时保持光标居中。

由于this Vim Tips page上提到的高值scrolloff,我管理,当光标周围有线时保持居中,但是当我的光标是光标时我不能让Vim表现那样靠近第一行或最后一行。有可能让Vim添加“tilde”~行来代替“real lines”吗?

4 个答案:

答案 0 :(得分:11)

您可以尝试此映射:

:nnoremap j jzz
:nnoremap k kzz

如果您经常使用G跳转到文件末尾,则可能还需要

:nnoremap G Gzz

答案 1 :(得分:0)

我只能猜测你的动机,但是如果你想要一个带有编辑正面和中心的单一,整洁的窗口,我可以推荐vimroom plugin。虽然它没有固定在中间的光标,但它使用'scrolloff'并在所有边上都有空填充窗口,以避免光标漂移到编辑器边界太多。

答案 2 :(得分:0)

究竟是什么造成了kev但是如果(像我一样)你是一个愚蠢的全键盘用户,你可以添加

:nnoremap j jzz
:nnoremap k kzz
:nnoremap <Down> jzz
:nnoremap <Up> kzz

感谢@kev

答案 3 :(得分:0)

kev建议的映射适用于普通模式下的基本导航,但不适用于搜索等更复杂的动作。他们也不会在插入模式下为您做任何事情,这是我个人大部分时间所用的地方:在文件写入的底部!

我有一个简单的如果很费力的解决方案

:autocmd CursorMoved,CursorMovedI * call CentreCursor()

具有用户定义的功能

function! CentreCursor()
    let pos = getpos(".")
    normal! zz
    call setpos(".", pos)
endfunction

保存当前光标位置,将视图居中,然后恢复光标位置(我最初只用autocmd尝试过* zz,但这似乎在追加到行尾时中断了)

顾名思义,每当光标以“普通”或“可视(插入)”模式移动时,CursorMoved(I)都会触发,因此这应该覆盖所有基数。显然,它经常触发,因此将其用作钩子可能不是一个好主意。我还没有发现性能方面的问题。您的里程可能会有所不同(理想情况下会有LineMoved事件或类似事件,但没有)。

以上给出了我期望:set scrolloff=999做的vim。它不会在文件顶部执行任何操作,因为那里没有~行。如果您坚持要使光标居中,即使在打开新文件时,(非常)粗略的解决方法是在BufRead上插入几行空白。您可能还希望在BufLeave或类似位置上将其删除。到目前为止,我还没有做过任何Vimscript,但是如果您愿意,可以开始使用它。