Vimスクリプトの別の自動ロードされた辞書関数内から自動ロードされた辞書関数を呼び出すことは可能ですか?
私はこのようなものをしたいautoload/foo.vim
:
function! foo#Initialize()
return 1
endfunction
let foo#MyDict = {}
function! foo#MyDict.say_hi() dict
echo "hi"
endfunction
let foo#OtherDict = {}
function! foo#OtherDict.call_hi() dict
call foo#MyDict.say_hi()
endfunction
そして、別のファイル/インタラクティブ/何でもからこのように使用したい:
call foo#Initialize()
call foo#OtherDict.call_hi()
残念ながら、それは私にエラーを引き起こします:
E121: Undefined variable: foo#MyDict
foo#Initialize()
自動ロードをトリガーしない辞書関数に関連する Vim のバグ/制限により、への呼び出しが必要です。これについては、Bram が問題を確認したGoogle グループのスレッドがあります。
しかし、それがこの問題の根本原因であるかどうかはわかりませんが、ファイルが ( 経由でfoo#Initialize()
) 自動ロードされると、辞書関数の呼び出しは一般的に機能するためです。エラーが発生するのは、上記のネストされた呼び出しの例です。
明確にするために、これはうまくいきます:
function! foo#SayHello()
echo "hello"
endfunction
function! foo#OtherDict.say_hello() dict
call foo#SayHello()
end
失敗するのは、自動ロードされた辞書関数へのネストされた呼び出しのみです。