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

Pse*_*che 3 vim vim-plugin

我使用一些自动命令在我的vim设置InsertLeaveBufReadPost事件中突出显示无关的空白.我最近开始使用插件来突出显示缩进(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
Run Code Online (Sandbox Code Playgroud)

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

autocmd InsertEnter * syn clear EOLWS | syn match EOLWS excludenl /\s\+\%#\@!$/
autocmd InsertLeave,BufReadPost * syn clear EOLWS | syn match EOLWS excludenl /\s\+$/
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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

Dhr*_*gar 5

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

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

autocmd User MyCustomEvent call my_custom_function()
Run Code Online (Sandbox Code Playgroud)

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

doautocmd User MyCustomEvent
Run Code Online (Sandbox Code Playgroud)

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