(In realtà l'ho capito da solo, ma poiché non ho trovato una risposta su questo sito ho pensato che potesse essere utile per creare una domanda con risposta autonoma )
Per fare ciò è possibile creare la seguente funzione e inserirla in .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
La funzione crea una variabile utilizzata per determinare se il gruppo era precedentemente abilitato o meno.
Quando non è stato abilitato, il gruppo viene popolato con i comandi automatici desiderati. Se il gruppo era precedentemente abilitato, lo utilizziamo autocmd!
per "ripristinarlo", ovvero eliminando il comando precedentemente inserito in esso.
Una documentazione pertinente è qui
Finalmente è possibile creare la seguente mappatura:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
da usare F4per chiamare la funzione.
EDIT : Karl Yngve Lervåg ha suggerito una versione migliorata di questa funzione che ha ridotto il numero di righe di codice, ho pensato che sarebbe stato bello mantenere entrambe le versioni che funzionano ancora, forse più facilmente da capire da un debuttante vimscript come me.
Ecco la funzione migliorata di Karl, molte grazie a lui:
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
In questa versione il gruppo viene sempre ripristinato e, se non è stato abilitato, viene popolato con i autocomandi desiderati