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とaとは根本的に違いはありません。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

その後、私は大丈夫だっただろう。オートautocmd!コマンドのグループを作成します。コマンドは、そのグループで定義されているすべてのオートコマンドをクリアします。それは重要です:

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.