(Właściwie to sam to wymyśliłem, ale ponieważ nie znalazłem odpowiedzi na tej stronie, pomyślałem, że może to być przydatne do stworzenia pytania z odpowiedzią )
W tym celu można utworzyć następującą funkcję i umieścić ją w .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
Funkcja tworzy zmienną używaną do ustalenia, czy grupa była wcześniej włączona, czy nie.
Gdy nie jest włączona, grupa jest zapełniana poszukiwanymi poleceniami automatycznymi. Jeśli grupa była wcześniej włączona, używamy jej autocmd!
do „resetowania”, tj. Usuwania wcześniej wprowadzonego polecenia.
Odpowiednia dokumentacja jest tutaj
Wreszcie można utworzyć następujące mapowanie:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
do F4wywołania funkcji.
EDYCJA : Karl Yngve Lervåg zasugerował ulepszoną wersję tej funkcji, która zmniejszyła liczbę wierszy kodu, uważam, że dobrze byłoby zachować obie wersje, ponieważ pierwsza nadal działa, być może łatwiejsza do zrozumienia dla takiego debiutanta vimscript jak ja.
Oto ulepszona funkcja Karla, wiele dzięki niemu:
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
W tej wersji grupa jest zawsze resetowana, a jeśli nie została włączona, jest zapełniana poszukiwanymi poleceniami automatycznymi