2016-10-20 9 views
1

.vimディレクトリを確認すると、vim-plugでインストールされたすべてのプラグインが.vim/pluggedディレクトリにあることがわかりました。この場合、vimはどのようにこれらのプラグインをロードしましたか?私は、同じプラグインが正常にインストールされている場合は、どちらがより高い妥当性を持ってロードされますか?vimプラグインはどのように私のvimプラグインを管理していますか?

+2

注:Stackoverflowには、 "viとvim"のベータサイトもあります。見てみな! – Jens

+0

優先順位は '' rtp ''オプションで決まります。どの変数がロードされているかを知るには、この変数を調べてください(BTW ':h 'rtp'を参照)。次に、あなたの次の質問はおそらく "どのように満たされていますか?"です。まあ。これは 'rtp'のおかげです。あなたのプラグインマネージャーはプラグインを別々のフォルダに登録しています。 –

+0

プラグインマネージャーのすべてのポイントが、それらの概念からあなたを守るのではないのですか? – romainl

答えて

1

plug#begin(...)機能はプラグインの「ホーム」のパスを設定します(vim-plugがあまりにもプラグインです)、

if a:0 > 0 
    let s:plug_home_org = a:1 
    let home = s:path(fnamemodify(expand(a:1), ':p')) 
    ... 

と機能plug#end()は(plug#()経由で)定義されたプラグインのリストを通過し、それらを保持します辞書に:

for name in g:plugs_order 
    ... 
     if has_key(plug, 'on') 
     let s:triggers[name] = { 'map': [], 'cmd': [] } 
     for cmd in s:to_a(plug.on) 
     if cmd =~? '^<Plug>.\+' 
      if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) 
      call s:assoc(lod.map, cmd, name) 

最後に(最終的に)呼び出すことによってruntimepathsourceのプラグインのそれぞれを操作するs:lod()

for [cmd, names] in items(lod.cmd) 
    execute printf(
    \ 'command! -nargs=* -range -bang %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', 
    \ cmd, string(cmd), string(names)) 
    endfor 

あなたはプラグインがvim-plugのコードからロードされる順序を把握することができます。

0

プラグインの読み込みは、スクリプトファイルのソースであることに留まりません。スクリプトファイルはどこにでも置くことができます。

通常、プラグインには、スクリプトが既に読み込まれているかどうかを検出するフラグ(g:変数など)があります。したがって、2度読み込まれることはありません。ただし、プラグインにこのメカニズムがない場合は、2回ロードすることができます。

関連する問題