10

SteveLoshのLearnVimscriptthe 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>解決され、私が知る限り、CcはESCが行うことをすでに実行している(通常モードに戻る)ため、副作用はまったくありません。私が間違っている場合は私を訂正してください。

4

2 に答える 2

15
:ino <C-C> <Esc>

^ Cは通常、get-me-out-of-here-now-pleaseキーです。autocmdを使用している場合は、CCを実行する必要はありません。CCが友達になります。

于 2012-05-25T15:25:09.770 に答える
3

これは以下に文書化されてい: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
于 2013-12-23T22:49:24.630 に答える