2016-10-20 3 views
1

Wenn ich mein Verzeichnis .vim überprüfe, habe ich festgestellt, dass alle Plugins, die mit vim-plug installiert sind, im Verzeichnis .vim/plugged sitzen. In diesem Fall, wie hat Vim diese Plugins geladen? Wenn ich das gleiche Plugin normalerweise installiert habe, welches wird dann besser geladen?Wie verwaltet der vim-plug meine vim plugins?

+2

Hinweis: Stackoverflow hat auch eine Beta-Site für "vi und vim". Hör zu! – Jens

+0

Die Priorität wird durch die Option "rtp" bestimmt. Schauen Sie in diese Variable, um zu wissen, in welcher Reihenfolge die Dinge geladen sind (siehe BTW ': h 'rtp''). Dann ist Ihre nächste Frage wahrscheinlich "wie ist es gefüllt?". Gut. Das ist dank 'rtp', dass dein Plugin-Manager Plugins registriert, die in separaten Ordnern leben. –

+0

Ist es nicht der ganze Sinn von Plugin-Managern, Sie vor diesen Konzepten zu schützen? – romainl

Antwort

1

Die plug#begin(...) Funktion setzt die „Heimat“ Pfad für das Plugin (vim-plug ist ein Plugin auch),

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

und die Funktion plug#end() definiert durch die Liste der Plugins geht (über plug#()) und hält sie in einem Wörterbuch:

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) 

dann manipuliert schließlich die runtimepath und source s jeweils eines der Plugins unter der Rufnummer (schließlich) 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 

Sie können den Auftrag herauszufinden, in welchem ​​Plugins von vim-plug ‚s-Code geladen werden.

0

Das Laden eines Plugins ist nichts anderes als das Sourcen der Skriptdatei (en). Die Skriptdatei könnte irgendwo sein.

Normalerweise hat ein Plugin ein Flag (g: variable), um zu erkennen, ob das Skript bereits geladen ist. Es wird also nicht zweimal geladen. Wenn Ihr Plugin diesen Mechanismus jedoch nicht besitzt, könnte es zweimal geladen werden.

Verwandte Themen