Vim的插入叶滞后

Vim的插入叶滞后,vim,statusline,Vim,Statusline,我在我的.vimrc中有这些行,用于更改Vim插入模式的状态行的颜色。状态行快速响应InsertEnter。但是,对于InsertLeave,在--INSERT--消失和StatusLine中的颜色更改之间大约有1秒的延迟。我可以得到一些帮助吗 set laststatus=2 if version >= 700 au InsertEnter * hi StatusLine term=reverse ctermbg=15 ctermfg=22 au InsertLeave * hi

我在我的
.vimrc
中有这些行,用于更改Vim插入模式的状态行的颜色。状态行快速响应
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
感谢您的帮助


谢谢

Vim看不出您正在退出插入模式,因为它看到的只是一个转义。箭头键通常设置为由终端vim解释为
OA
OB
OC
、和
OD
。所以vim在做任何事情之前都在等待序列中的下一个键。这也是如果键入
O
时,
O
只在屏幕上停留一秒钟,而不是在当前行上方打开新行的原因

Vim使用
timeoutlen
确定按键之间的等待时间。默认设置为1000毫秒。如果需要,您可以减少该值,但是这会使键入映射更困难

如果您在某些映射之外的单词后立即键入某些内容,则autocmd也会启动得更快

要查看的相关选项有
:h timeout
:h ttimeout
:h timeoutlen
,和
:h ttimeoutlen
,您只能在按下Escape键时使用当前vim的函数来执行命令,而不是在序列内部(箭头移动、键绑定等)

函数condinsertlave()
如果模式()=“n”
hi StatusLine term=reverse ctermbg=16 ctermfg=0
恩迪夫
端功能
autocmd InsertLeave*调用计时器\u start(200,{tid->condinertleave()})
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()})