以下是一个场景:
我想将另一个vimscript文件加载到我的脚本中(通过:runtime!命令),并且可以访问加载文件中的脚本作用域(s :)变量和函数。
是否可以(不改变加载的文件)?
答案 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)