如何激活Vim的可视模式中的相对行编号?

Zac*_*ase 6 vim editor

当我进入可视模式时,我正试图让Vim切换到相对行编号,然后回到绝对编号.我注意到有InsertEnterInsertLeaveautocmd事件,我可以像这样使用:

autocmd InsertEnter :set rnu
autocmd InsertLeave :set nu
Run Code Online (Sandbox Code Playgroud)

问题是,我似乎无法找到视觉模式的等效物.

Ing*_*kat 5

视觉模式没有此类事件(尚未实施;您可以提交补丁).要进入可视模式,您只需覆盖进入可视模式的少数命令:

:nnoremap <silent> v v:<C-u>set nonu rnu<CR>gv
:nnoremap <silent> V V:<C-u>set nonu rnu<CR>gv
:nnoremap <silent> <C-v> <C-v>:<C-u>set nonu rnu<CR>gv
Run Code Online (Sandbox Code Playgroud)

恢复'number'更加困难,因为除了显式退出via之外<Esc>,还有许多命令可以停止视觉模式.我能想出的最好的是触发器CursorMoved:

vnoremap <Esc> <Esc>:set nu<CR>
:autocmd CursorMoved * if mode() !~# "[vV\<C-v>]" | set nu | endif
Run Code Online (Sandbox Code Playgroud)