在Vim中创建用户定义的事件

时间:2014-02-03 18:52:59

标签: vim vim-plugin

我在InsertLeaveBufReadPost事件的vim设置中使用了几个自动命令来突出显示无关的空格。我最近开始使用插件来突出显示缩进(https://github.com/nathanaelkane/vim-indent-guides

问题是如果有一个带缩进的空行,它会被indent-guides插件突出显示,但不会被我的auto命令突出显示。我想要做的是在插件中添加一个自定义事件,这样当完成突出显示时,我可以设置我的自动命令来触发并覆盖突出显示的情况。

例如,这是我想要的流程类型(或至少类似的东西):

indent-guides plugin activates
indent-guides plugin highlights all indentation
indent-guides plugin triggers custom event signaling it is done
indent-guides plugin exits
auto command whitespace highlighter is triggered by indent-guides completion event

以下是我用于空格突出显示的自动命令:

autocmd InsertEnter * syn clear EOLWS | syn match EOLWS excludenl /\s\+\%#\@!$/
autocmd InsertLeave,BufReadPost * syn clear EOLWS | syn match EOLWS excludenl /\s\+$/

编辑:

我用另一种方式解决了这个问题(通过编辑不同的插件)。这仍然没有回答这个具体问题,因此我不会将其作为解决方案发布。

我作为插件解决问题的方法:https://github.com/ntpeters/vim-better-whitespace

1 个答案:

答案 0 :(得分:5)

VIM已经支持触发本机和自定义用户事件。由于您的问题与自定义事件有关,因此我想举一个小例子来演示如何做同样的事情。

这是您定义自定义autocmd事件的方式:

autocmd User MyCustomEvent call my_custom_function()

这是触发定义的自定义autocmd事件的方法:

doautocmd User MyCustomEvent

现在您可以以类似的方式使用doautocmd来触发上面提到的自定义autocmd事件和本机vim事件,因此根据您的用例,您需要评估所需的两个中的哪一个。自定义用户autocmds的优点是你可以休息,因为没有其他人会触发它们,而对于原生vim autocmds,它们可以由任何人触发。