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

时间:2018-09-24 21:28:01

标签: vim plugins autocmd

我最近安装了VimWiki插件,并且正在总体上了解Vim的插件体系结构(最好使用after/ftplugin之类的目录,而不是将所有内容塞入我的.vimrc文件中)。

我想在编写Wiki文件之前调用一个函数,如下所示:

autocmd BufWrite *.wiki call CleanMarkdown()

但是,vimwiki设置了自己的BufWrite自动命令,该命令会更新Wiki文件中的所有目录。我可以使用自己的函数来调用此自动命令,该函数可以调用CleanMarkdown()以及vimwiki现在所做的任何事情,但是面对vimwiki插件将来可能发生的更改,这将很脆弱。

是否有一种标准的方法将添加添加到BufWrite自动命令要做的事情清单中?

1 个答案:

答案 0 :(得分:1)

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按照定义的顺序执行。通过使用之后目录,您的目录将在插件目录之后执行。