autocmd not 运行 调用函数时执行
Autocmd not running execute when calling function
我正在开发一个小 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
我还没有确认这是 "correct" 方法,但这是对我有用的方法..
- 删除了
augroup
并简单地定义了一个 autocmd
,它将在 vim 加载我的插件的 .vim
文件时正确执行。
由于某些原因,autocmd InsertLeave * call s:MakeMatch()
有点偏离标准。最明显的是 <SID>
应该在尝试调用该函数时使用。
顺便说一句; @Peter Rinker:提到尝试 运行 autocmd InsertLeave * match Search /./.
当 运行 处于 :Ex
模式时,它就像一个魅力,但是如果您尝试在 au!
中定义plugin/vimrc 文件不起作用..
我认为这可能与 match
不是 eval
函数这一事实有关,但我不确定是否确实如此。
- 确保它 运行 作为
Ex
命令。由于我必须 运行 命令而不是定义命令,所以我不得不更改为 {event}
并使用 :
调用 execute
就像我为获得@Peter 的建议所做的那样上班。
au! VimEnter * execute(":autocmd InsertLeave * call <SID>MakeMatch()")
以上内容对我有用,但我肯定对任何其他 approach/more 信息感兴趣。
我正在开发一个小 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
我还没有确认这是 "correct" 方法,但这是对我有用的方法..
- 删除了
augroup
并简单地定义了一个autocmd
,它将在 vim 加载我的插件的.vim
文件时正确执行。
由于某些原因, autocmd InsertLeave * call s:MakeMatch()
有点偏离标准。最明显的是<SID>
应该在尝试调用该函数时使用。
顺便说一句; @Peter Rinker:提到尝试 运行 autocmd InsertLeave * match Search /./.
当 运行 处于 :Ex
模式时,它就像一个魅力,但是如果您尝试在 au!
中定义plugin/vimrc 文件不起作用..
我认为这可能与 match
不是 eval
函数这一事实有关,但我不确定是否确实如此。
- 确保它 运行 作为
Ex
命令。由于我必须 运行 命令而不是定义命令,所以我不得不更改为{event}
并使用:
调用execute
就像我为获得@Peter 的建议所做的那样上班。
au! VimEnter * execute(":autocmd InsertLeave * call <SID>MakeMatch()")
以上内容对我有用,但我肯定对任何其他 approach/more 信息感兴趣。