(Tôi thực sự đã tự mình tìm ra nhưng vì tôi không tìm thấy câu trả lời trên trang này, tôi nghĩ rằng nó có thể hữu ích để tạo ra một câu hỏi tự trả lời )
Để làm như vậy, có thể tạo hàm sau và đặt nó vào .vimrc
:
function! ToggleTestAutoGroup()
if !exists('g:TestAutoGroupMarker')
let g:TestAutoGroupMarker = 1
endif
" Enable if the group was previously disabled
if (g:TestAutoGroupMarker == 1)
let g:TestAutoGroupMarker = 0
" actual augroup
augroup TestAutoGroup
autocmd! BufEnter * echom "BufEnter " . bufnr("%")
autocmd! BufLeave * echom "BufLeave " . bufnr("%")
autocmd! TabEnter * echom "TabEnter " . tabpagenr()
autocmd! TabLeave * echom "TabLeave " . tabpagenr()
augroup END
else " Clear the group if it was previously enabled
let g:TestAutoGroupMarker = 1
" resetting the augroup
augroup TestAutoGroup
autocmd!
augroup END
endif
endfunction
Hàm tạo một biến được sử dụng để xác định xem nhóm đã được kích hoạt trước đó hay chưa.
Khi nó không được kích hoạt, nhóm sẽ được tạo ra với các autocommands mong muốn. Nếu nhóm đã được bật trước đó, chúng tôi sẽ sử dụng autocmd!
để "đặt lại", tức là xóa lệnh đã nhập trước đó.
Một tài liệu liên quan ở đây
Cuối cùng, có thể tạo ánh xạ folowing:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
để sử dụng F4để gọi hàm.
EDIT : Karl Yngve Lervåg đã đề xuất một phiên bản cải tiến của chức năng này giúp giảm số lượng dòng mã, tôi cảm thấy thật tốt khi giữ cả hai phiên bản đầu tiên vẫn hoạt động có thể dễ hiểu hơn bởi một người đầu tiên vimscript như tôi.
Đây là chức năng được cải thiện của Karl, cảm ơn ông rất nhiều:
function! ToggleTestAutoGroup()
" Switch the toggle variable
let g:TestAutoGroupToggle = !get(g:, 'TestAutoGroupToggle', 1)
" Reset group
augroup TestAutoGroup
autocmd!
augroup END
" Enable if toggled on
if g:TestAutoGroupToggle
augroup TestAutoGroup
autocmd! BufEnter * echom "BufEnter " . bufnr("%")
autocmd! BufLeave * echom "BufLeave " . bufnr("%")
autocmd! TabEnter * echom "TabEnter " . tabpagenr()
autocmd! TabLeave * echom "TabLeave " . tabpagenr()
augroup END
endif
endfunction
Trong phiên bản này, nhóm luôn được đặt lại và nếu không được bật, nó sẽ được tạo ra với các autocommands mong muốn