(Aslında kendim anladım ama bu sitede bir cevap bulamadığım için bunun kendinden cevaplı bir soru oluşturmak için yararlı olabileceğini düşündüm )
Bunu yapmak için aşağıdaki işlevi oluşturmak ve içine koymak mümkündür .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
İşlev, grubun önceden etkinleştirilip etkinleştirilmediğini belirlemek için kullanılan bir değişken oluşturur.
Etkinleştirilmediğinde, grup istenen otomatik komutlarla doldurulur. Grup daha önce etkinleştirildiyse, bunu autocmd!
"sıfırlamak" için kullanırız , yani daha önce girilmiş olan komutu silmek.
İlgili bir dokümantasyon burada
Son olarak, aşağıdaki haritalamayı oluşturmak mümkündür:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
F4işlevi çağırmak için kullanın .
DÜZENLEME : Karl Yngve Lervåg kod satır sayısını azaltan bu işlevin geliştirilmiş bir sürümünü önerdi , her iki sürümü de hala benim gibi bir vimscript debutant tarafından anlaşılması daha kolay çalışan her iki sürümü tutmak iyi olacağını hissettim.
İşte Karl'ın iyileştirilmiş işlevi, çok teşekkürler:
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
Bu sürümde grup her zaman sıfırlanır ve etkinleştirilmemişse, istenen otomatik komutlar ile doldurulur.