(Na verdade, eu descobri isso sozinho, mas como não encontrei uma resposta neste site, pensei que seria útil criar uma pergunta auto-respondida )
Para isso, é possível criar a seguinte função e colocá-la no .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
A função cria uma variável usada para determinar se o grupo foi ativado anteriormente ou não.
Quando não foi ativado, o grupo é preenchido com os comandos automáticos desejados. Se o grupo foi ativado anteriormente, usamos autocmd!
para "redefinir", ou seja, excluir o comando anteriormente inserido nele.
Uma documentação relevante está aqui
Por fim, é possível criar o seguinte mapeamento:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
para usar F4para chamar a função.
EDIT : Karl Yngve Lervåg sugeriu uma versão aprimorada dessa função que reduziu o número de linhas de código; achei que seria bom manter as duas versões, a primeira ainda funcionando, talvez mais fácil de entender por um estreante do vimscript como eu.
Aqui está a função aprimorada de Karl, muito obrigado a ele:
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
Nesta versão, o grupo é sempre redefinido e, se não foi ativado, é preenchido com os comandos automáticos desejados