如何在 vim 中禁用 autocmd 或 augroup?

如何在 vim 中禁用 autocmd 或 augroup?

假设我有一组命令,例如:

augroup MyGroup
  autocmd CursorMoved * silent call MyCommandOne()
augroup END

我想暂时禁用 MyGroup 中的所有自动命令,然后稍后重新启用它。

我可以对该组做些什么?具体来说,有没有办法一次性禁用整个组?如果没有,我该怎么做才能禁用单个命令?

查看帮助,我只看到几个选项:

  • augroup!将删除整个组:我认为这是不对的,因为我需要重新启用它。(但也许有办法轻松地重新定义该组?)
  • :noautocmd只会禁用一次性命令调用的回调。(并且它会禁用全部自动命令,未指定的命令)
  • eventignore解决事件绑定,而不是命令:听起来它禁用了给定事件的所有绑定命令,而不仅仅是我可以指定的一个命令或组。

这是怎么做到的?

答案1

:help autocmd

If you want to skip autocommands for one command, use the :noautocmd command
modifier or the 'eventignore' option.

: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.

所以看起来这:noautocmd就是您正在寻找的东西。

您想在什么情况下禁用augroup

答案2

这里,看来这实现了它:

:augroup Foo
:autocmd BufEnter * :echo "hello"
:augroup END

...

:autocmd! Foo BufEnter *

答案3

对于不具备原始海报要求能够恢复的人来说augroup:autocmd! <augroup name>命令是简单地删除所有autocmd内容augroup,例如:

:autocmd! MyGroup

答案4

如果您想要暂时autocmd全局禁用某个事件,您可以执行以下操作:

set eventignore=CursorMoved,CursorMovedI,InsertLeave

...列出您想要暂时忽略的任何事件。但这不会局限于特定事件augroup

要重新启用这些事件,只需重置 eventignore:

set eventignore=""

将此答案放在这里以防有人像我一样偶然发现这个问题,但其他答案都不足以解决他们的情况。

相关内容