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

标签 vim vim-plugin

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

问题是,如果有缩进的空行,它会被 indent-guides 插件突出显示,但不会被我的自动命令突出显示。我想要做的是将自定义事件添加到插件中,以便在完成突出显示后,我可以设置自动命令来触发并在应该的情况下覆盖该突出显示。

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

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

最佳答案

VIM 已经支持触发 native 和自定义用户事件。由于您的问题是关于自定义事件,我想举一个小例子来演示如何执行相同的操作。

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

autocmd User MyCustomEvent call my_custom_function()

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

doautocmd User MyCustomEvent

现在,您可以以类似的方式使用 doautocmd 来触发上面提到的自定义 autocmd 事件和 native vim 事件,因此根据您的用例,您需要评估您需要两者中的哪一个。自定义用户自动命令的优点是您可以放心没有其他人会触发它们,而对于 native vim 自动命令,它们可以由任何人触发。

关于vim - 在 Vim 中创建用户定义的事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21535350/

相关文章:

c++ - 在linux中输入包含希腊字符的字符串

git - vim git gutter 实时更新不起作用

vimscript : clear command line after `confirm`

python - 在进入普通模式或ESC map 时触发光标定位和选择

vim - TagHighlight 和 Indexer 插件集成

vim - 如何激活现有的 GVim 窗口

vim - vimscript 中函数被多次调用

vim - 如何在vim或neovim中触发自动完成建议框(插件neoclide/coc.vim)

Vim:如何禁用默认的LogiPat插件?

vim - 使用 Vim 和 Fish-Shell 进行语法着色