有没有一种干净的方法可以在 Vim 中增加 `BufWrite` autocmd?

Is there a clean way to augment a `BufWrite` autocmd in Vim?

我最近安装了 VimWiki 插件,正在学习 Vim 的一般插件架构(最好使用像 after/ftplugin 这样的目录而不是死记硬背一切都进入我的 .vimrc 文件)。

我想在编写 wiki 文件之前调用一个函数,例如:

autocmd BufWrite *.wiki call CleanMarkdown()

但是,vimwiki 设置了它自己的 BufWrite 自动命令,它会更新 wiki 文件中的所有目录。我 可以 用我自己的函数破坏这个自动命令,这个函数调用 CleanMarkdown() 加上 vimwiki 今天正在做的任何事情,但是面对 vimwiki 插件未来可能发生的变化,这会很脆弱。

是否有一种标准方法可以添加到BufWrite自动命令的待办事项列表中?

自动命令的多样性

任何事件都可以有多个 :autocmd;该命令是累积的。相应的 :autocmd! 删除某些命令集(取决于给它的参数)。

如果您不指定 [group],autocmd 将在全局 space 中定义,并且被某些 :autocmd! 清除的风险很高。因此,建议指定一个 [group](尤其是在插件中)。这样,您就可以避免另一个(行为不当的)插件或自定义破坏您的 autocmd。

与 vimwiki 插件集成

因为插件已经定义了它自己的文件类型,你不需要复制文件类型检测逻辑,即*.wiki 模式。相反,如果您将 :autocmd 定义放在 ~/.vim/after/ftplugin/vimwiki.vim 中,您可以使用 <buffer> 特殊模式使此自动命令仅适用于当前 (VimWiki) 缓冲区。

augroup MyVimWikiCleanup
autocmd BufWrite <buffer> call CleanMarkdown()
augroup END

订购

:autocmd按照定义的顺序执行。通过使用 after 目录,你的将在插件的之后执行。