2

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

失敗するのは、自動ロードされた辞書関数へのネストされた呼び出しのみです。

4

1 に答える 1

1

スクリプトがplugin/ディレクトリに配置されている場合、または:runtime使用前に明示的に'd'されている場合も同じことが起こります。foo#MyDictただし、代わりにscript-localを使用してもエラーは発生しませんs:MyDict。これは私も予想外です。vim_dev メーリング リストにバグを送信してください。

于 2013-04-06T12:01:17.743 に答える