我想随时保持光标居中。
由于此 Vim 提示页面scrolloff
中提到的高值,我设法在光标周围有线条时使其居中,但当光标靠近第一行或最后一行时,我无法使 Vim 以这种方式运行。是否可以让 Vim 添加“波浪号”行来替换“真实行”?~
我想随时保持光标居中。
由于此 Vim 提示页面scrolloff
中提到的高值,我设法在光标周围有线条时使其居中,但当光标靠近第一行或最后一行时,我无法使 Vim 以这种方式运行。是否可以让 Vim 添加“波浪号”行来替换“真实行”?~
你可以试试这个映射:
:nnoremap j jzz
:nnoremap k kzz
如果您经常使用G
跳转到文件末尾,您可能还想要
:nnoremap G Gzz
究竟是什么让 kev 但如果(像我一样)你是一个愚蠢的全键盘用户,你可以添加
:nnoremap j jzz
:nnoremap k kzz
:nnoremap <Down> jzz
:nnoremap <Up> kzz
感谢@kev
kev建议的映射适用于普通模式下的基本导航,但不适用于搜索等更复杂的动作。他们也不会在插入模式下为您做任何事情,这是我个人花费大部分时间的地方:在文件的底部写入!
我拥有的一个简单但笨拙的解决方案是
:autocmd CursorMoved,CursorMovedI * call CentreCursor()
使用用户定义的函数
function! CentreCursor()
let pos = getpos(".")
normal! zz
call setpos(".", pos)
endfunction
它保存当前光标位置,使视图居中,然后恢复光标位置(我最初尝试autocmd
使用 just * zz
,但这似乎打破了附加到行尾)。
顾名思义,只要光标在 Normal 或 Visual (Insert) 模式下移动, CursorMoved(I)就会触发,因此这应该涵盖所有基础。它显然经常被触发,因此将其用作钩子可能不是一个好主意。我还没有注意到性能下降;您的里程可能会有所不同(理想情况下会有LineMoved
事件或类似事件,但没有)。
以上给出了在 vim 中我期望:set scrolloff=999
做的事情。它不会在文件顶部做任何事情,因为那里没有~
行。如果你坚持让光标居中,即使打开一个新文件,一个(非常)粗略的解决方法是在BufRead
. 您可能还想删除 then onBufLeave
或类似内容。我之前没有做过任何 vimscript,但如果你愿意,可以开始。
我只能猜测你的动机,但如果你想要一个带有编辑前端和中心的单一、整洁的窗口,我可以推荐vimroom 插件。虽然它没有将光标固定在中间,但它使用'scrolloff'
并在所有侧面都清空填充窗口,以避免光标过多地漂移到编辑器边框。