답변:
답을 바탕으로 :의 상태를 유지하기 위해 변수가 필요하지 않습니다 . 그룹에 속한 적어도 하나를 알고 augroup
있다면 사용할 수 있습니다 .exists()
autocmd
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
실행하여 그룹을 두 부분으로 나누고 분기를 제거 할 수도 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 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
이 버전에서는 그룹이 항상 재설정되며, 활성화되지 않은 경우 원하는 자동 명령으로 채워집니다.
쉬운 방법은 전역 변수를 사용하는 것입니다. 예:
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