(Я действительно понял это сам, но так как я не нашел ответа на этом сайте, я подумал, что это может быть полезно для создания вопроса с самостоятельным ответом )
Для этого можно создать следующую функцию и поместить ее в .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
Функция создает переменную, используемую для определения, была ли группа ранее включена или нет.
Когда он не был включен, группа заполняется требуемыми автокомандами. Если группа была ранее включена, мы используем ее autocmd!
для «сброса», то есть удаляем ранее введенную в нее команду.
Соответствующая документация здесь
Наконец, можно создать следующее отображение:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
использовать F4для вызова функции.
РЕДАКТИРОВАТЬ : Карл Ингве Lervåg предложил улучшенную версию этой функции, которая уменьшила количество строк кода, я чувствовал, что было бы хорошо, чтобы обе версии, первая из которых все еще работает, может быть легче понять таким дебютантом vimscript, как я.
Вот улучшенная функция Карла, большое ему спасибо:
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
В этой версии группа всегда сбрасывается, и если она не была включена, она заполняется требуемыми автокомандами