Jak wyłączyć autocmd lub augroup w vimie?

25

Biorąc pod uwagę, że mam grupę poleceń, takich jak:

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

Chcę na pewien czas wyłączyć wszystkie polecenia automatyczne w MyGroup, a następnie włączyć je ponownie później.

Czy mogę coś zrobić z grupą? W szczególności, czy istnieje sposób na wyłączenie całej grupy na raz? Jeśli nie, co mogę zrobić, aby wyłączyć poszczególne polecenia?

Patrząc na pomoc, widzę tylko kilka opcji:

  • augroup!usunie całą grupę: nie sądzę, aby było to właściwe, ponieważ będę chciał ponownie ją włączyć. (Ale może istnieje sposób, aby łatwo ponownie zdefiniować grupę?)
  • :noautocmdwyłączy tylko oddzwanianie dla jednorazowego wywołania polecenia. (I wyłącza wszystkie autocmds, nieokreślone)
  • eventignore odnosi się do powiązania zdarzenia, a nie polecenia: wygląda na to, że wyłącza wszystkie powiązane polecenia dla danego zdarzenia, a nie tylko jedno polecenie lub grupę, którą mogę określić.

Jak to się robi?

Andrew Vit
źródło

Odpowiedzi:

20

Od :help autocmd:

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

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

Wygląda więc na to, :noautocmdczego szukasz.

W jakim kontekście chcesz wyłączyć augroup?

romainl
źródło
Dziękuję za odpowiedź, ale przeczytałem to już w dokumentacji. Wyjaśniłem moje pytanie, aby (mam nadzieję) pokazać, czego szukam.
Andrew Vit
8

Od tutaj wydaje się, że ten osiąga go:

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

...

:autocmd! Foo BufEnter *
Ivotron
źródło
1

Dla każdego, kto nie ma oryginalnego plakatu wymaganego do przywrócenia augroup, :autocmd! <augroup name>jest polecenie, aby po prostu usunąć wszystko autocmdw augroup, np .:

:autocmd! MyGroup
robenkleen
źródło