Làm cách nào để tắt autocmd hoặc augroup trong vim?


25

Cho tôi có một nhóm các lệnh như:

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

Tôi muốn vô hiệu hóa tất cả các autocommands trong Mygroup một thời gian và sau đó kích hoạt lại nó sau.

Có điều gì tôi có thể làm với nhóm không? Cụ thể, có cách nào để vô hiệu hóa toàn bộ nhóm cùng một lúc không? Nếu không, tôi có thể làm gì để vô hiệu hóa các lệnh riêng lẻ?

Nhìn vào sự giúp đỡ, tôi chỉ thấy một vài lựa chọn:

  • augroup!sẽ xóa toàn bộ nhóm: Tôi không nghĩ điều này đúng vì tôi sẽ muốn kích hoạt lại nó. (Nhưng có lẽ có một cách để dễ dàng xác định lại nhóm một lần nữa?)
  • :noautocmdsẽ chỉ vô hiệu hóa các cuộc gọi lại cho một lệnh gọi một lần. (Và nó vô hiệu hóa tất cả các autocmds, không được chỉ định)
  • eventignore giải quyết ràng buộc sự kiện, không phải lệnh: có vẻ như nó vô hiệu hóa tất cả các lệnh bị ràng buộc cho một sự kiện nhất định, không chỉ một lệnh hoặc một nhóm tôi có thể chỉ định.

Làm thế nào được thực hiện?

Câu trả lời:


20

Từ :help autocmd:

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

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

Vì vậy, nó xuất hiện :noautocmdlà những gì bạn đang tìm kiếm.

Trong bối cảnh nào bạn muốn vô hiệu hóa một augroup?


Cảm ơn câu trả lời của bạn, nhưng tôi đã đọc nó trong tài liệu rồi. Tôi đã làm rõ câu hỏi của mình để (hy vọng) cho thấy những gì tôi đang tìm kiếm.
Andrew Vit

8

Từ đây , dường như điều này đạt được nó:

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

...

:autocmd! Foo BufEnter *

1

Đối với bất kỳ ai không có yêu cầu áp phích ban đầu về khả năng khôi phục augroup, :autocmd! <augroup name>là lệnh chỉ cần xóa tất cả autocmdtrong một augroup, ví dụ:

:autocmd! MyGroup
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.