18

Учитывая, что у меня есть группа команд, таких как:

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

Я хочу на время отключить все автокоманды в MyGroup, а затем снова включить их.

Могу ли я что-нибудь сделать с группой? В частности, есть ли способ отключить всю группу сразу? Если нет, что я могу сделать, чтобы отключить отдельные команды?

Глядя на помощь, я вижу только несколько вариантов:

  • augroup! удалит всю группу: я не думаю, что это правильно, потому что я хочу снова включить ее. (Но, может быть, есть способ легко переопределить группу снова?)
  • :noautocmd отключит обратные вызовы только для одноразового вызова команды. (И это отключает все autocmds, не указанные)
  • eventignore обращается к привязке события, а не к команде: звучит так, как будто отключает все связанные команды для данного события, а не только одну команду или группу, которую я могу указать.

Как это сделать?

2 ответа2

14

От :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?

8

Отсюда, кажется, что это достигает этого:

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

...

:autocmd! Foo BufEnter *

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .