我在.vimrc
中有这些行来改变Vim的插入模式的状态行的颜色。 StatusLine快速响应InsertEnter
。但是,对于InsertLeave
,约有。 --INSERT--
消失与StatusLine中颜色变化之间的1秒延迟。我可以帮忙解决这个问题吗?
set laststatus=2
if version >= 700
au InsertEnter * hi StatusLine term=reverse ctermbg=15 ctermfg=22
au InsertLeave * hi StatusLine term=reverse ctermbg=16 ctermfg=0
endif
我尝试了:au Insertleave
,只显示了一个命令:
--- Auto-Commands ---
InsertLeave
* hi StatusLine term=reverse ctermbg=16 ctermfg=0
感谢任何帮助。
由于
答案 0 :(得分:5)
Vim无法告诉您正在离开插入模式,因为它所看到的只是一个逃脱。箭头键通常设置为由终端vim解释为<ESC>OA
,<ESC>OB
,<ESC>OC
和<ESC>OD
。所以vim在做任何事之前都在等待序列中的下一个键。这也是因为如果您键入<ESC>O
,O
只是在屏幕上停留一秒钟而不是在当前位置上打开一个新行,这也是原因。
Vim使用timeoutlen
来确定按键之间等待的时间。默认为1000毫秒。你可以减少这个,但是它会使输入映射变得更难。
如果您在某些映射的一部分之后立即键入内容,则autocmd也会被更快地触发。
要查看的相关选项包括:h timeout
,:h ttimeout
,:h timeoutlen
和:h ttimeoutlen
。
答案 1 :(得分:1)
仅当按下Escape键时才可以使用timer_start函数与当前vim mode check一起执行命令,而不能在序列内部(箭头移动,键绑定等)执行命令。
function <SID>condInsertLeave()
if mode() == "n"
hi StatusLine term=reverse ctermbg=16 ctermfg=0
endif
endfunction
autocmd InsertLeave * call timer_start(200, { tid -> <SID>condInsertLeave()})