回答:
あなたの答えに構築:あなたはの状態を維持するための変数を必要としないaugroup
、あなたが使用することができexists()
ますが、少なくとも1知っていることを提供し、そのためにautocmd
グループの一部である(S)
function! ToggleTestAutoGroup()
if !exists('#TestAutoGroup#BufEnter')
augroup TestAutoGroup
autocmd!
autocmd BufEnter * echom "BufEnter " . bufnr("%")
autocmd BufLeave * echom "BufLeave " . bufnr("%")
autocmd TabEnter * echom "TabEnter " . tabpagenr()
autocmd TabLeave * echom "TabLeave " . tabpagenr()
augroup END
else
augroup TestAutoGroup
autocmd!
augroup END
endif
endfunction
nnoremap <F4> :call ToggleTestAutoGroup()<CR>
else
実行することで、グループを2つに分割してブランチを削除することもできautocmd!
ます。
exists('#TestAutoGroup#BufEnter')
後に何が返されautocmd!
ますか?
(私は実際に自分でそれを理解しましたが、このサイトで答えが見つからなかったので、自分で答える質問を作成するのに役立つと思いました)
これを行うには、次の関数を作成してに配置することができます.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関数を呼び出すために使用します。
編集:Karl YngveLervågは、コードの行数を削減するこの関数の改良版を提案しました。私は、両方のバージョンを引き続き機能させておくとよいと感じました。
ここにカールの改良された機能があります、彼に感謝します:
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
このバージョンでは、グループは常にリセットされ、有効になっていない場合は、必要なオートコマンドが入力されます
簡単な方法は、グローバル変数を使用することです。例:
augroup TestAutoGroup
autocmd!
autocmd BufEnter * |
\ if get(g:, 'toggle_autocmd', 1) |
\ echom "BufEnter " . bufnr("%") |
\ endif
augroup END
nnoremap <f4> :<c-u>let g:toggle_autocmd = !get(g:, 'toggle_autocmd', 1)<cr>
詳細については、以下を参照してください。
:h g:
:h get()
:h :if
:h :bar
:h line-continuation