14

我想随时保持光标居中。

由于此 Vim 提示页面scrolloff中提到的高值,我设法在光标周围有线条时使其居中,但当光标靠近第一行或最后一行时,我无法使 Vim 以这种方式运行。是否可以让 Vim 添加“波浪号”行来替换“真实行”?~

4

4 回答 4

17

你可以试试这个映射:

:nnoremap j jzz
:nnoremap k kzz

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

:nnoremap G Gzz
于 2012-11-15T13:47:47.507 回答
2

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

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

感谢@kev

于 2012-11-15T22:49:22.437 回答
2

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,但如果你愿意,可以开始。

于 2020-08-09T12:05:30.823 回答
0

我只能猜测你的动机,但如果你想要一个带有编辑前端和中心的单一、整洁的窗口,我可以推荐vimroom 插件。虽然它没有将光标固定在中间,但它使用'scrolloff'并在所有侧面都清空填充窗口,以避免光标过多地漂移到编辑器边框。

于 2012-11-15T14:17:50.897 回答