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 中与字典函数不触发自动加载相关的错误/限制,调用是必要的。有一个关于这个的谷歌群组线程,布拉姆证实了这个问题。

但是,我不确定这是这个问题的根源,因为一旦文件被自动加载(通过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 回答