从加载的vimscript文件访问脚本范围变量

时间:2016-08-29 22:20:59

标签: vim

以下是一个场景:

我想将另一个vimscript文件加载到我的脚本中(通过:runtime!命令),并且可以访问加载文件中的脚本作用域(s :)变量和函数。

是否可以(不改变加载的文件)?

1 个答案:

答案 0 :(得分:1)

除非脚本为此目的公开函数,否则我担心无法访问脚本变量。

例如,我的所有自动加载插件都具有

等功能
function! lh#dict#debug(expr) abort
  return eval(a:expr)
endfunction

但是,完全可以通过一个非常脏的技巧来访问脚本功能。

但是,老实说,你最好让脚本维护者根据你的需要打开他/她的脚本。您首先需要获取脚本ID(这可以通过解析:scriptname:redir命令的结果或通过最近的execute()函数来完成。

" or if your prefer, if you're looking plugin foobar.vim:
let snr = matchstr(matchstr(split(execute('scriptnames'), "\n"), 'foobar.vim'), '^\d\+')

假设加载的第42个脚本定义了函数s:foo(),您可以使用以下命令访问它:

let Foo = function('<SNR>42_foo') " or, use snr variable obtained as explained above instead of 42
echo Foo(42)