2

I've defined the following autocmds, which active/deactivate relative line numbers, depending on whether I'm in Insert mode or not:

" Relative line numbers, except Insert mode
augroup toggle_relative_number
autocmd InsertEnter * :setlocal norelativenumber
autocmd InsertLeave * :setlocal relativenumber

The problem I'm facing is that autocmd InsertLeave * :setlocal relativenumber only gets executed, when I leave Insert mode using Escape - not using Ctrl+C.

How can I also execute the autocmd, when I leave Insert mode using Ctrl+C.?

1 Answer 1

2

From :h i_CTRL-C (emphasis mine):

Quit insert mode, go back to Normal mode. Do not check for abbreviations. Does not trigger the InsertLeave autocommand event.

However, you could remap <C-c> as follows:

inoremap <C-c> <C-c>:doautocmd InsertLeave<CR>

if you really want to use Ctrl+c.

See:

:h i_CTRL-C
:h :doautocmd
:h InsertLeave
9
  • 1
    Iow, don’t use C-c :) it breaks a lot things
    – D. Ben Knoble
    Commented Sep 8, 2020 at 22:32
  • @D.BenKnoble I'm not sure what you mean. Commented Sep 9, 2020 at 3:01
  • 1
    do never map <c-c>, you loose the ability to break existing running scripts. Commented Sep 9, 2020 at 7:10
  • @ChristianBrabandt Would it be OK to map <C-c> as in the second example? It still sends <C-c> at the end, with additional steps. Commented Sep 9, 2020 at 16:19
  • 1
    @JakeGrossman I am not sure. I thought as soon as you map <c-c> to something, you loose the ability to interrupt anything. even when it contains another <c-c>. But from my limited testing it seems to work. But I wouldn't bet on it. Commented Sep 10, 2020 at 7:19

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.