我了解自动命令的工作方式以及如何使用它们,但是我不确定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

除非我误解了什么是互惠生真的。那为什么有用呢?

#1 楼

使用augroup的主要原因是为了更好地控制自动命令的范围,例如一口气删除一堆自动命令。一种常见的模式是将au!用作组的第一部分。这将删除组中所有现有的自动命令,并允许重新启动。如果不使用组,则au!会删除所有不想删除的所有/许多自动命令。

删除自动命令实际上是很常见的,例如在插件中,因为这样可以允许一个插件/ ftplugin多次。如果您没有删除自动命令,那么每次您购买插件/ ftplugin时,都将添加同一自动命令的新副本。您的vimrc文件也是如此。通过在vimrc文件中使用组,可以安全地重新加载它。

有关更多信息,请参见:h 40.3

#2 楼

自动命令组使您有机会组织自动命令,这本身就是一个非常有用的功能。

假设您正在编写插件。将插件的自动命令分组到您自己的命名空间中是有意义的,仅是因为它可以让您随意启用/禁用自动命令。基本上可以更好地控制您的设置。

实践中...

如果您不将其分配给组,则默认情况下,自动命令会“安装”在全局组中。在自己的组中安装相关的自动命令不仅可以使事情更清楚,而且可以使您很容易地通过一个vimrc来防止可怕的“堆积”效果: >在左侧,将在正确安装该组的每个自动命令之前立即卸载整个组。整洁。

在右边,Vim会浪费地为每个自动命令运行相同的“卸载/安装”程序。脏。

但是,如果您不想每次都不必写整个块。可以将自动命令直接分配给一个组,因此您可以在以下位置定义一个组:
augroup spam             versus    autocmd! Foo * foo
    autocmd!                       autocmd! Bar * bar
    autocmd Foo * foo
    autocmd Bar * bar
augroup END


这将为您提供:


命名间隔
防止堆积


灵活性


#3 楼

除了其他答案,我发现最直接的实际好处是它使重新加载vimscript文件变得容易。

例如,将其粘贴在vimrc中:

退出,重新启动,创建一个新的缓冲区。您会看到New buffer!,您可以使用:messages进行验证。 >

如果我改用了它:我创建了一组自动命令,:source $MYVIMRC命令清除了该组中所有已定义的自动命令。这很重要,因为:

autocmd BufCreate * echom "New buffer!"


只需将其添加到同一个augroup中即可。出于同样的原因,我们都键入autocmd!fun!,而不是没有command!的版本不允许覆盖。

评论


突出他的“语义”含义非常有帮助! :)

–林丰
17-10-26在19:21