2016-08-29 7 views
0

からスクリプトスコープ変数にアクセスすると、シナリオである(!経由:ランタイムコマンド)、およびスクリプトへのアクセス権を持っているが(S :)変数のスコープロードされたファイルの中にある関数などです。ここでロードされたvimscriptファイル

(読み込まれたファイルを変更せずに)可能ですか?

答えて

1

スクリプトがその目的のための関数を公開していない限り、私はスクリプト変数にアクセスすることができないのではないかと恐れています。

は例えば、すべての私の自動読み込みプラグインはしかし、それは非常に汚いトリックを通じてスクリプト機能にアクセスするために完全に可能だな

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

としての機能を持っています。

しかし、正直なところ、あなたの必要に応じてスクリプトを開くようスクリプト管理者に依頼するのがよいでしょう。あなたは、これは:redirコマンドを介して、または最近​​機能を通じて:scriptnameの結果を解析することによって行うことができます(スクリプトIDを取得する最初の必要があります。

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

はのは、ロードされた42thスクリプトが機能 s:foo()定義するとしましょう、あなたがアクセスすることができますそれに:

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

おかげでリュック、私はこの後にしようと、私はロードしてるファイルは.indent/html.vimあるようメンテナを尋ねることは、可能になるかどうかわからない – kam

+0

@kam、あなたはこれを意味します。標準的なファイルですか?手順はメンテナをあなたのパッチに連絡することです。その後、ファイルをBramに送り返します。 –