从VimL中的其他自动加载的字典函数调用自动加载的字典函数(vimscript)

时间:2013-04-05 22:36:56

标签: vim

是否可以从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

由于Vim中与字典函数相关的错误/限制未触发自动加载,因此需要调用foo#Initialize()。有关于此的Google Groups主题,Bram确认了这个问题。

然而,我不确定这是否是这个问题的根源,因为一旦文件被自动加载(通过foo#Initialize()),调用字典函数就可以正常工作。这是上面的嵌套调用示例,它给了我一个错误。

澄清一下,这很好用:

function! foo#SayHello()
  echo "hello"
endfunction

function! foo#OtherDict.say_hello() dict
  call foo#SayHello()
end

它只是对自动加载的字典函数的嵌套调用失败。

1 个答案:

答案 0 :(得分:1)

当脚本在使用前放入plugin/目录或明确地:runtime'时,会发生同样的情况。但是,使用脚本本地foo#MyDict代替s:MyDict时没有错误。这对我来说也是意想不到的。请在vim_dev mailing list上提交错误。