我使用一个小脚本来触发插入模式,以更改行号颜色:
function! CursorLineNrColorInsert(mode)
" Insert mode: blue
if a:mode == "i"
highlight CursorLineNr ctermfg=4
highlight CursorLineNr guifg=#268bd2
" Replace mode: red
elseif a:mode == "r"
highlight CursorLineNr ctermfg=1
highlight CursorLineNr guifg=#dc322f
else
highlight CursorLineNr ctermfg=0
highlight CursorLineNr guifg=#073642
endif
endfunction
autocmd InsertEnter * call CursorLineNrColorInsert(v:insertmode)
autocmd InsertLeave * highlight CursorLineNr ctermfg=0
autocmd InsertLeave * highlight CursorLineNr guifg=#073642
当我进入任何插入模式时,它可以很好地工作并立即更改我的行号,而在正常模式下则恢复为原始颜色。
我希望对于可视模式也能实现同样的效果:
function! CursorLineNrColorVisual(mode)
" Visual mode: orange
if mode()=~#"^[vV\<C-v>]"
highlight CursorLineNr ctermfg=9
highlight CursorLineNr guifg=#cb4b16
else
highlight CursorLineNr ctermfg=0
highlight CursorLineNr guifg=#073642
endif
endfunction
autocmd CursorMoved * call CursorLineNrColorVisual(mode())
基本上这样做是可行的,但是不能立即生效,因为该函数是在CursorMoved
触发的。我该如何在激活任何可视模式时立即触发CursorLineNrColorVisual()
呢?
VisualEnter
或VisualLeave
事件。那么将v
、V
和<C-v>
映射到一个包装函数,以执行颜色交替操作,如何? - romainlàutocmd VisualEnter ...
。 :) - Saucier