(J'ai en fait compris par moi-même mais comme je n'ai pas trouvé de réponse sur ce site, j'ai pensé que cela pourrait être utile pour créer une question auto-répondue )
Pour ce faire, il est possible de créer la fonction suivante et de la placer dans .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 fonction crée une variable utilisée pour déterminer si le groupe a été précédemment activé ou non.
Lorsqu'il n'était pas activé, le groupe est rempli avec les autocommandes souhaitées. Si le groupe était précédemment activé, nous l'utilisons autocmd!
pour le "réinitialiser", c'est-à- dire en supprimant la commande précédemment entrée.
Une documentation pertinente est ici
Enfin, il est possible de créer la cartographie suivante:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
utiliser F4pour appeler la fonction.
EDIT : Karl Yngve Lervåg a suggéré une version améliorée de cette fonction qui réduisait le nombre de lignes de code, je pensais qu'il serait bon de garder les deux versions, la première fonctionnant toujours, peut-être plus facile à comprendre par un débutant vimscript comme moi.
Voici la fonction améliorée de Karl, merci beaucoup à 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
Dans cette version, le groupe est toujours réinitialisé, et s'il n'était pas activé, il est rempli avec les autocommandes souhaitées