Подтвердить что ты не робот

Событие Vim InsertLeave не возникает при использовании CTRL-C вместо ESC

Я читаю Стив Лош Узнать Vimscript 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 больше не активна?

ИЗМЕНИТЬ | Meh, добавив inoremap <C-c> <ESC>, разрешает его, и, насколько я могу судить, абсолютно никаких побочных эффектов, поскольку C-c уже делает то, что делает ESC (возвращается в нормальный режим). Исправьте меня, если я ошибаюсь.

4b9b3361

Ответ 1

:ino <C-C> <Esc>

^ C обычно является ключом "get-me-out-of-here-now-please", если у вас есть автозапуск, который вам не нужен, C-C становится вашим другом.

Ответ 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