我最近安装了 VimWiki 插件,并且正在学习 Vim 的插件架构(并且最好使用after/ftplugin
等目录,而不是将所有内容塞进我的.vimrc
文件中(。
我想在编写 wiki 文件之前调用一个函数,如下所示:
autocmd BufWrite *.wiki call CleanMarkdown()
但是,vimwiki 设置了自己的BufWrite
autocommand,它会更新 wiki 文件中的任何目录。我可以用我自己的函数来破坏这个自动命令,该函数同时调用 CleanMarkdown(( 以及 vimwiki 今天正在执行的任何操作,但面对 vimwiki 插件未来可能的变化,这将是脆弱的。
是否有一种标准方法可以添加到要执行的操作列表中以进行BufWrite
自动命令?
autocmds 的多重性
任何事件都可以有许多:autocmd
;该命令是累积的。相应的:autocmd!
删除某些命令集(取决于提供给它的参数(。
如果不指定[group]
,则 autocmd 将在全局空间中定义,并且某些:autocmd!
清除此内容的风险很高。因此,建议指定一个[group]
(尤其是在插件中(。这样,您可以避免另一个(行为不端(插件或自定义破坏您的 autocmd。
与 vimwiki 插件集成
由于插件已经定义了自己的文件类型,因此您无需复制文件类型检测逻辑,即*.wiki
模式。相反,如果将:autocmd
定义放在~/.vim/after/ftplugin/vimwiki.vim
中,则可以使用<buffer>
特殊模式使此 autocmd 仅应用于当前 (VimWiki( 缓冲区。
augroup MyVimWikiCleanup
autocmd BufWrite <buffer> call CleanMarkdown()
augroup END
订购
:autocmd
按定义顺序执行。通过使用after 目录,您的目录将在插件之后执行。