使用CTRL-C而不是ESC时不会发生Vim InsertLeave事件

时间:2012-05-25 15:16:19

标签: vim

我正在通过Steve Losh的Learn Vimscript the Hard Way阅读并添加到我的.vimrc

" make status line red while in insert mode
augroup hi_statusline
  autocmd!
  autocmd InsertEnter * hi StatusLine ctermbg=15  ctermfg=9
  autocmd InsertLeave * hi StatusLine ctermbg=238 ctermfg=253
augroup END
然而,我注意到了一种奇怪的行为。有时我点击 C-c 退出插入模式,这种方式很好并且有记录。当我这样做时,InsertLeave事件不会触发。当我使用 ESC 时,它工作正常。这是一个众所周知的vim?是否有一种解决方法,通过挂钩另一个表明InsertMode不再有效的事件?

编辑|嗯,添加一个inoremap <C-c> <ESC>可以解决它,据我所知,绝对没有副作用,因为C-c已经完成了ESC所做的事情(回到正常模式)。如果我错了,请纠正我。

2 个答案:

答案 0 :(得分:11)

:ino <C-C> <Esc>

^ C通常是现在开始使用的钥匙,如果你有一个autocmd,你需要不运行C-C成为你的朋友。

答案 1 :(得分:2)

这在:help i_CTRL-C

下记录
CTRL-C  Quit insert mode, go back to Normal mode.  Do not check for
        abbreviations.  Does not trigger the |InsertLeave| autocommand
        event.

像往常一样,Bram实现了设计目标。

:help design-documented