我正在使用Vimrunner对 Vim 插件进行单元测试。一切正常,但我正在寻找一种更好/规范的方式来执行脚本本地功能。由于它们在脚本之外不直接可见,因此我目前正在公开脚本<SID>
并将其添加到我的调用中以运行它们。
我必须将此代码添加到我的插件中以公开 SID:
function! s:SID()
let fullname = expand("<sfile>")
return matchstr(fullname, '<SNR>\d\+_')
endfunction
let g:my_plugin_SID = s:SID()
这会将 SID 公开为 eg <SNR>18_
。由于 Vim 函数都是全局的,并且只是名称,因此可以通过在 SID 前面加上前缀来在脚本外部调用脚本本地函数:
:call <SNR>18_some_function()
然后我在规范中这样做:
describe "s:reverse_string" do
let!(:sid) { VIM.command("echo g:my_plugin_SID") }
def reverse_string(string)
VIM.command("echo #{sid}reverse_string('#{string}')")
end
it "does something" do
reverse_string("foo").should == "oof"
end
end
有一个更好的方法吗?