How to disable autocmd or augroup in vim?
Given I have a group of commands such as:
augroup MyGroup
autocmd CursorMoved * silent call MyCommandOne()
augroup END
I want to disable all the autocommands in MyGroup for a time and then re-enable it later.
Is there anything I can do with the group? Specifically, is there a way to disable the whole group at once? If not, what can I do to disable individual commands?
Looking at the help, I only see a few options:
-
augroup!
will delete the whole group: I don't think this is right since I will want to re-enable it again. (But maybe there's a way to easily redefine the group again?) -
:noautocmd
will only disable the callbacks for a one-off invocation of a command. (And it disables all autocmds, not specified ones) -
eventignore
addresses the event binding, not the command: it sounds like it disables all bound commands for a given event, not just one command or a group I can specify.
How is this done?
Solution 1:
From :help autocmd
:
If you want to skip autocommands for one command, use the :noautocmd command
modifier or the 'eventignore' option.
From :help :noautocmd
:
To disable autocommands for just one command use the ":noautocmd" command
modifier. This will set 'eventignore' to "all" for the duration of the
following command. Example:
:noautocmd w fname.gz
This will write the file without triggering the autocommands defined by the
gzip plugin.
So it appears :noautocmd
is what you are looking for.
In what context do you want to disable an augroup
?
Solution 2:
From here, it seems that this achieves it:
:augroup Foo
:autocmd BufEnter * :echo "hello"
:augroup END
...
:autocmd! Foo BufEnter *
Solution 3:
For anyone who doesn't have the original posters requirement of being able to restore the augroup
, :autocmd! <augroup name>
is the command to simply delete all autocmd
in an augroup
, e.g.:
:autocmd! MyGroup
Solution 4:
If you want to temporarily disable autocmd
globally for a given event, you can do:
set eventignore=CursorMoved,CursorMovedI,InsertLeave
...listing whichever events you want to temporarily ignore. This won't be limited to a specific augroup
however.
To re-enable these events just reset eventignore:
set eventignore=""
Dropping this answer here in case anyone stumbles upon this question like I did but none of the other answers suffice for their situation.