代码之家  ›  专栏  ›  技术社区  ›  Jim Stewart

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

vim
  •  2
  • Jim Stewart  · 技术社区  · 12 年前

    是否可以在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中与字典功能相关的错误/限制,没有触发自动加载。有一个 Google Groups Bram证实了这个问题。

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

    为了澄清,这很好:

    function! foo#SayHello()
      echo "hello"
    endfunction
    
    function! foo#OtherDict.say_hello() dict
      call foo#SayHello()
    end
    

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

    1 回复  |  直到 12 年前
        1
  •  1
  •   Ingo Karkat    12 年前

    当脚本被放入 plugin/ 目录或显式 :runtime 'd使用前。但当不是 foo#MyDict 本地脚本 s:MyDict 使用。这对我来说也是出乎意料的。请在上提交一个错误 vim_dev mailing list .