我想随时保持光标居中。
由于this Vim Tips page上提到的高值scrolloff
,我管理,当光标周围有线时保持居中,但是当我的光标是光标时我不能让Vim表现那样靠近第一行或最后一行。有可能让Vim添加“tilde”~
行来代替“real lines”吗?
答案 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,但是如果您愿意,可以开始使用它。