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 が公開され<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
これを行うより良い方法はありますか?