Vim 调用函数时,Autocmd未运行execute
我正在开发一个小型vim插件,需要添加一个Vim 调用函数时,Autocmd未运行execute,vim,vim-plugin,Vim,Vim Plugin,我正在开发一个小型vim插件,需要添加一个autocmd,以便在退出插入模式时调用我的一个函数MakeMatch 获取要调用的函数的实际设置非常简单: augroup Poi autocmd! autocmd InsertLeave * call s:MakeMatch() augroup END 最初我的印象是函数没有被调用,但后来我在定义中添加了一个echo,并看到字符串被打印出来 该功能基本上如下所示: function! s:MakeMatch() "Iterate and
autocmd
,以便在退出插入模式时调用我的一个函数MakeMatch
获取要调用的函数的实际设置非常简单:
augroup Poi
autocmd!
autocmd InsertLeave * call s:MakeMatch()
augroup END
最初我的印象是函数没有被调用,但后来我在定义中添加了一个echo
,并看到字符串被打印出来
该功能基本上如下所示:
function! s:MakeMatch()
"Iterate and create g:build_string up
"g:build_string=":match poi /\%5l\|\%6l/"
execute g:build_string
endfunction
如果我要:调用s:MakeMatch()
生成字符串将成功执行,正如我在离开插入模式时所预期的那样
我在其他插件中看到过使用au*exec..
而没有问题的代码。我想知道这是否是在InsertLeave
期间调用match的问题;我可以肯定地看到有东西在调用hi clear
或者在InsertLeave
期间不允许突出显示
我一直在和一个同事玩这个游戏,但没能让它运行比赛。我们尝试直接调用匹配和其他类型的执行。。我很想得到更多关于为什么这可能不起作用的信息
有人有什么想法吗
编辑:
这是我写的。现在它正在按预期工作:D我还没有确认这是一个“正确”的方法,但它是一个对我有效的方法
augroup
,只需定义一个autocmd
,当vim加载我的插件的.vim
文件时,它将正确执行autocmd InsertLeave*调用s:MakeMatch()
由于一些原因有点偏离了标准。最明显的是,在尝试调用函数时应该使用
李>
作为旁白@Peter Rinker:提到尝试运行autocmd InsertLeave*匹配搜索/
,当在:Ex
模式下运行时,它就像一个符咒,但是如果您尝试定义au代码>在plugin/vimrc文件中,它将不起作用。。
我认为这可能与match
不是eval
函数有关,但我不确定实际情况是否如此
确保它作为Ex
命令运行。因为我必须运行命令而不是定义它,所以我必须切换到{event}
,并使用:
调用execute
,就像我为了让@Peter的建议起作用所做的那样
au!VimEnter*执行(“:autocmd InsertLeave*调用MakeMatch()”)
上述方法对我来说很有效,但我肯定对任何其他方法/更多信息感兴趣。你当然可以这样做。简单测试用例:autocmd InsertLeave*匹配搜索/
。这将不会有任何问题。所以很可能是你如何构建你的g:build\u字符串。(这个变量真的应该是全局变量吗?)注意:InsertLeave
在使用
退出插入模式时不会触发。请参见:h InsertLeave
。能否显示生成字符串的代码?正如所发布的那样,您的代码是有效的(如果您将poi更改为存在的突出显示组),因此我发现将命令添加到文件中无法正确执行。如果我做了:au InsertLeave*匹配搜索/
,它将像一个符咒一样工作。不知道为什么它不会在文件本身中响应它。。