我最近安装了VimWiki插件,并且正在总体上了解Vim的插件体系结构(最好使用after/ftplugin
之类的目录,而不是将所有内容塞入我的.vimrc
文件中)。
我想在编写Wiki文件之前调用一个函数,如下所示:
autocmd BufWrite *.wiki call CleanMarkdown()
但是,vimwiki设置了自己的BufWrite
自动命令,该命令会更新Wiki文件中的所有目录。我可以使用自己的函数来调用此自动命令,该函数可以调用CleanMarkdown()以及vimwiki现在所做的任何事情,但是面对vimwiki插件将来可能发生的更改,这将很脆弱。
是否有一种标准的方法将添加添加到BufWrite
自动命令要做的事情清单中?
答案 0 :(得分:1)
任何事件可以有多个:autocmd
;该命令是累积的。相应的:autocmd!
会删除某些命令集(取决于为其提供的参数)。
如果您未指定[group]
,则autocmd将在全局空间中定义,并且很有可能被某些:autocmd!
清除。因此,建议指定[group]
(尤其是在插件中)。这样,您就可以避免其他(行为异常)插件或自定义内容破坏您的autocmd。
由于该插件已经定义了自己的文件类型,因此您无需重复文件类型检测逻辑,即*.wiki
模式。相反,如果将:autocmd
定义放在~/.vim/after/ftplugin/vimwiki.vim
中,则可以使用<buffer>
特殊模式使此autocmd仅适用于当前(VimWiki)缓冲区。
augroup MyVimWikiCleanup
autocmd BufWrite <buffer> call CleanMarkdown()
augroup END
:autocmd
按照定义的顺序执行。通过使用之后目录,您的目录将在插件目录之后执行。