(Ich habe es tatsächlich selbst herausgefunden, aber da ich auf dieser Website keine Antwort gefunden habe, dachte ich, dass dies nützlich sein könnte, um eine selbst beantwortete Frage zu erstellen. )
Dazu ist es möglich, die folgende Funktion zu erstellen und in Folgendes einzufügen .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
Die Funktion erstellt eine Variable, mit der bestimmt wird, ob die Gruppe zuvor aktiviert wurde oder nicht.
Wenn es nicht aktiviert war, wird die Gruppe mit den gewünschten Autobefehlen gefüllt. Wenn die Gruppe zuvor aktiviert war, verwenden wir sie autocmd!
, um sie zurückzusetzen, dh den zuvor eingegebenen Befehl zu löschen.
Eine relevante Dokumentation finden Sie hier
Schließlich ist es möglich, die folgende Zuordnung zu erstellen:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
verwenden F4, um die Funktion aufzurufen.
EDIT : Karl Yngve Lervåg schlug eine verbesserte Version dieser Funktion vor, die die Anzahl der Codezeilen reduzierte. Ich hielt es für gut, beide Versionen beizubehalten, wobei die erste noch funktioniert, was für einen Vimscript-Debütanten wie mich möglicherweise leichter zu verstehen ist.
Hier ist Karls verbesserte Funktion, vielen Dank an ihn:
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
In dieser Version wird die Gruppe immer zurückgesetzt, und wenn sie nicht aktiviert wurde, wird sie mit den gewünschten Autobefehlen gefüllt