Search code examples
vimautocmd

How to setup a file pattern for autocmd to not match the command line buffer?


I have an au command to check if a file had been changed:

autocmd CursorHold * checktime

But when I launch a command line window with q: or with q/ than I get the following error:

Error detected while processing CursorHold Auto commands for "*":
E11: Invalid in command-line window; <CR> executes, CTRL-C quits: checktime
Press ENTER or type command to continue

My question is, is it possible to set up the autocmd's pattern to exclude command line buffers and other readonly buffers?


Solution

  • The easiest fix is to just silence the errors:

    autocmd CursorHold * silent! checktime
    

    Alternatively, you could also wrap this in try...catch /:E11:/. Or, you could attempt to check for the command-line window:

    autocmd CursorHold * if expand('%') !=# '[Command Line]' | checktime | endif