键入时是否可以自动使Vim垂直居中?

时间:2018-04-25 15:45:15

标签: vim

键入一堆文本时,光标会被推向屏幕底部。我经常必须退出INSERT模式以键入zz,以便Vim居中我的光标所在的行。我想要一些更自动的东西:例如,如果光标超过一个阈值(比如“屏幕中心的线下面5-8行”),Vim会直接zz,而不会退出INSERT模式。

它可能会破坏打字过程,但由于我会打字,我的眼睛会盯着屏幕看到正在发生的事情。我认为退出INSERT模式更具破坏性。

是否有配置选项或支持此用例的插件?

3 个答案:

答案 0 :(得分:4)

您可以通过设置'滚动'来保持光标的中心线为中心。大值的选项:

set scrolloff=999

'滚动'从帮助页面:

Minimal number of screen lines to keep above and below the cursor.
This will make some context visible around where you are working.  If
you set it to a very large value (999) the cursor line will always be
in the middle of the window (except at the start or end of the file or
when long lines wrap).

答案 1 :(得分:2)

如果在此区域中键入任何字符或进入插入模式时,以下将垂直居中光标位于缓冲区的最后1/3内(自.vimrc添加):

augroup autoCenter
  autocmd!
  autocmd InsertCharPre,InsertEnter * if (winline() * 3 >= (winheight(0) * 2))
                                            \| norm! zz
                                        \| endif
augroup END

:h autocmd-events并添加您可能需要触发居中的任何其他事件

答案 2 :(得分:0)

我在以下位置遇到了这个解决方案:https://vi.stackexchange.com/a/26055/31046

这在插入模式下对我来说很好用:

inoremap <CR> <C-\><C-O><C-E><CR>
inoremap <BS> <BS><C-O>zz
inoremap <right> <right><C-O>zz
inoremap <left> <left><C-O>zz
inoremap <up> <up><C-O>zz
inoremap <down> <down><C-O>zz

我只需要在插入模式下按退格键或任何箭头键即可使其生效。