有没有一种干净的方法可以在 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 目录,你的将在插件的之后执行。
我最近安装了 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 目录,你的将在插件的之后执行。