如何在 Vim 的可视模式下激活相对行号(仅限可视模式)?

6

我正在尝试让Vim在进入可视模式时切换到相对行号,然后在退出可视模式后恢复到绝对行号。我注意到有InsertEnterInsertLeave自动命令事件,可以像下面这样使用:

autocmd InsertEnter :set rnu
autocmd InsertLeave :set nu

问题是,我似乎找不到可视模式的等效物。
1个回答

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

恢复'number'更困难,因为除了通过<Esc>明确退出外,还有许多停止视觉模式的命令。我能想到的最好方法是在CursorMoved上设置一个触发器:

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

对我来说,vnoremap <Esc> <Esc>:set nu<CR> 让我在可视模式下按下向下箭头键时会打出字母 B,而不是高亮文本。 - mareoraft
是的,在映射中覆盖转义字符存在问题,因为它是许多特殊键的前缀。在GVIM中效果更好。 - Ingo Karkat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接