假设我有一组命令,例如:
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=""
将此答案放在这里以防有人像我一样偶然发现这个问题,但其他答案都不足以解决他们的情况。