(De hecho, lo descubrí yo mismo, pero como no encontré una respuesta en este sitio, pensé que podría ser útil para crear una pregunta con respuesta propia )
Para hacerlo, es posible crear la siguiente función y ponerla en .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 función crea una variable utilizada para determinar si el grupo estaba habilitado previamente o no.
Cuando no estaba habilitado, el grupo se llena con los comandos automáticos deseados. Si el grupo estaba habilitado previamente, lo usamos autocmd!
para "restablecerlo", es decir, eliminar el comando que ingresó anteriormente.
Una documentación relevante está aquí
Finalmente, es posible crear el siguiente mapeo:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
usar F4para llamar a la función.
EDITAR : Karl Yngve Lervåg sugirió una versión mejorada de esta función que redujo el número de líneas de código, sentí que sería bueno mantener ambas versiones, la primera todavía funcionando, tal vez más fácil de entender por un debutante vimscript como yo.
Aquí está la función mejorada de Karl, muchas gracias a él:
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
En esta versión, el grupo siempre se restablece y, si no estaba habilitado, se completa con los comandos automáticos deseados