왜 augroup을 사용해야합니까?


31

자동 명령의 작동 방식과 사용 방법을 이해 하지만 augroup이 무엇인지 조금 확신합니다. 나는 읽었다:help augroup

                                                    *:aug* *:augroup*
:aug[roup] {name}               Define the autocmd group name for the
                                following ":autocmd" commands.  The name "end"
                                or "END" selects the default group.
                                To avoid confusion, the name should be
                                different from existing {event} names, as this
                                most likely will not do what you intended.

이것은 왜 그들이 왜 유용한 지, 왜 서로 옆에 많은 자동 명령을 정의하는 것보다 자동 명령 그룹 이름을 만들고 싶어하는지 설명하지 않습니다.

예를 들어, 자동 명령 foobar관련이있는 이유는 무엇입니까?

augroup spam
  au!
  au foo * foo
  au bar * bar
augroup END

내가 할 수있을 때

"Autocommands for spam
au foo * foo
au bar * bar

내가 augroups가 실제로 무엇인지 오해하지 않는 한. 그렇다면 왜 유용합니까?

답변:


30

augroups 를 사용하는 주된 이유 는 한 번에 여러 자동 명령을 삭제하는 등 다양한 자동 명령 범위를보다 세밀하게 제어 할 수 있기 때문 입니다. 일반적인 패턴은 au!그룹을 첫 번째 부분으로 사용하는 것입니다. 이렇게하면 그룹의 기존 자동 명령이 모두 제거되고 새로 시작할 수 있습니다. 그룹을 사용하지 않은 경우 au!제거하지 않으려는 모든 / 많은 자동 명령을 제거합니다.

자동 명령 삭제는 플러그인과 같이 플러그인 / ftplugin을 여러 번 소싱 할 수 있기 때문에 실제로 플러그인에서와 같이 매우 일반적입니다. 자동 명령을 삭제하지 않은 경우 플러그인 / ftplugin을 소싱 할 때마다 동일한 자동 명령의 새 사본을 추가합니다. 이것은 vimrc파일 에도 적용 됩니다. vimrc 파일에서 그룹을 사용하면 다시로드하는 것이 안전 해집니다.

자세한 내용은를 참조하십시오 :h 40.3.


19

자동 명령 그룹은 자동 명령을 구성 할 수있는 기회를 제공하며 이는 자체적으로 매우 유용한 기능입니다.

플러그인을 작성한다고 가정하십시오. 플러그인의 자동 명령을 자신의 네임 스페이스 아래에 그룹화하면 원하는대로 자동 명령을 활성화 / 비활성화 할 수 있기 때문에 의미가 있습니다.

당신 vimrc은 근본적으로 다르지 plugin/foo.vim않으므로 자동 명령 그룹으로 얻는 것은 기본적으로 설정을보다 잘 제어하는 ​​것입니다.

실제로…

그룹에 할당하지 않으면 기본적으로 자동 명령이 전역 그룹에 "설치"됩니다. 관련 자동 명령을 자체 그룹에 설치하면 상황이 더 명확해질뿐만 아니라 두터운 "파일 정리"효과를 매우 쉽게 단일하게 방지 할 수 있습니다 !.

augroup spam             versus    autocmd! Foo * foo
    autocmd!                       autocmd! Bar * bar
    autocmd Foo * foo
    autocmd Bar * bar
augroup END

왼쪽에서 해당 그룹의 각 자동 명령이 올바르게 설치되기 전에 전체 그룹이 한 번에 제거됩니다. 산뜻한.

오른쪽에서 Vim은 각 자동 명령에 대해 동일한 "제거 / 설치"루틴을 낭비하게됩니다. 더러운.

그러나 원하지 않으면 매번 전체 블록을 작성할 필요는 없습니다. 자동 명령을 그룹 에 직접 할당 하여 그룹을 어딘가에 정의 할 수 있습니다.

augroup spam
    autocmd!
augroup END

다른 스크립트에서도 자동 명령을 원하는 곳에 두십시오.

autocmd spam Foo * foo
autocmd spam Bar * bar

이것은 당신에게 줄 것입니다 :

  • 네임 스페이스
  • 쌓임 방지
  • 주문
  • 적응성

15

다른 답변 외에도 가장 즉각적인 이점은 vimscript 파일을 쉽게 다시로드 할 수 있다는 것입니다.

예를 들어 이것을 vimrc에 붙이십시오.

autocmd BufCreate * echom "New buffer!"

종료하고 다시 시작하여 새 버퍼를 만드십시오. 를 New buffer!통해 확인할 수 있습니다 :messages.

이제 vimrc :를 다시로드 :source $MYVIMRC하고 다시 새로운 버퍼를 만드십시오.

지금 무엇을 보십니까?


대신 이것을 사용 했습니까?

augroup inform_new_buffer
    autocmd!
    autocmd BufCreate * echom "New buffer!"
augroup end

그럼 난 괜찮 았을 것입니다. 나는 autocommands의 그룹의 만들기 autocmd!명령은 정의 된 모든 autocommands을 취소 하는 그룹 . 다음과 같은 이유로 중요합니다.

augroup inform_new_buffer
    autocmd BufCreate * echom "New buffer!"
augroup end

단지시겠습니까 추가 같은 augroup에.


즉, 우리는 모든 유형 동일한 이유 fun!command!, 오히려없는 버전보다 !무시 허용하지 않습니다.


그가 "의미"의 의미를 강조하기 위해 많은 도움이 될 것입니다 !:)
llinfeng
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.