(Я насправді зрозумів це сам, але, оскільки я не знайшов відповіді на цьому сайті, я подумав, що це може бути корисним для створення запитання, на яке я відповів )
Для цього можна створити таку функцію і помістити її в .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для виклику функції.
EDIT : Карл Інгве Лервег запропонував вдосконалену версію цієї функції, яка зменшила кількість рядків коду, я вважав, що було б добре зберегти обидві версії, коли перша ще працює, може бути легше зрозуміти дебютант 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
У цій версії група завжди скидається, і якщо вона не була включена, вона заповнюється потрібними автокомандами