我正在使用小型vim插件,并且只要退出插入模式,就需要添加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
如果我要:call s:MakeMatch()
,那么构建字符串将按照我在退出插入模式时的预期成功执行..
我在其他使用au * exec..
但没有问题的插件中看到了代码。我想知道这是否是InsertLeave
期间调用匹配的问题;我绝对可以看到调用hi clear
的内容,或者在InsertLeave
期间可能会突出显示。
与同事一起玩这个游戏并且避风港能够让它运行这场比赛。我们尝试直接调用匹配和其他类型的执行..希望获得更多关于为什么这可能不起作用的信息。
有人有什么想法吗?
修改 这是我写的full code for the plugin。它现在按预期工作:D
答案 0 :(得分:1)
我还没有确认这是"正确"方法,但它是适合我的那个......
augroup
,只需定义一个{vim}加载我的插件autocmd
文件即可正常执行的.vim
。autocmd InsertLeave * call s:MakeMatch()
有点偏离标记。最明显的是在尝试调用函数时应该使用<SID>
。 撇开; @Peter Rinker:提到试图在autocmd InsertLeave * match Search /./.
模式下运行时运行:Ex
就像魅力一样,但如果你试图在插件/ vimrc文件中定义au!
,它就会赢得“{1}}。工作..
我认为这可能与match
不是eval
函数的事实有关,但我不确定实际情况是否如此。
Ex
命令运行。由于我必须运行命令而不是定义命令,因此我必须更改为{event}
并使用execute
调用:
,就像我为了获得@ Peter的建议一样工作。 au! VimEnter * execute(":autocmd InsertLeave * call <SID>MakeMatch()")
以上为我做了诀窍,但我绝对对任何其他方法/更多信息感兴趣。