(จริง ๆ แล้วฉันคิดออกเอง แต่เมื่อฉันไม่พบคำตอบในเว็บไซต์นี้ฉันคิดว่าอาจเป็นประโยชน์ในการสร้างคำถามที่ตอบเอง )
ในการทำเช่นนั้นมันเป็นไปได้ที่จะสร้างฟังก์ชั่นต่อไปนี้และวางไว้ใน.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
ฟังก์ชั่นสร้างตัวแปรที่ใช้ในการพิจารณาว่าเคยเปิดใช้งานกลุ่มหรือไม่
เมื่อไม่ได้เปิดใช้งานกลุ่มจะเติมข้อมูลด้วย AutoCommands ที่ต้องการ หากกลุ่มถูกเปิดใช้งานก่อนหน้านี้เราใช้autocmd!
เพื่อ "รีเซ็ต" มันคือการลบคำสั่งที่ป้อนไว้ก่อนหน้านี้
เอกสารที่เกี่ยวข้องอยู่ที่นี่
ในที่สุดมันก็เป็นไปได้ที่จะสร้างแผนที่ folowing:
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
เพื่อใช้F4ในการเรียกใช้ฟังก์ชัน
แก้ไข : Karl Yngve Lervågแนะนำรุ่นที่ปรับปรุงใหม่ของฟังก์ชั่นนี้ซึ่งลดจำนวนบรรทัดของรหัสฉันรู้สึกว่ามันจะเป็นการดีที่จะรักษาทั้งสองเวอร์ชันให้เป็นเวอร์ชั่นแรกที่ยังคงทำงานได้ง่ายกว่าที่ฉันจะเข้าใจได้ง่าย
นี่คือฟังก์ชั่นที่ได้รับการปรับปรุงของ Karl ซึ่งขอบคุณมากสำหรับเขา:
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
ในเวอร์ชันนี้กลุ่มจะถูกรีเซ็ตเสมอและหากไม่ได้เปิดใช้จะมีการเติมข้อความอัตโนมัติที่ต้องการ