2016-10-20 48 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中的插件的每一個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:變量例如)來檢測腳本是否已經加載。所以它不會被加載兩次。但是,如果你的插件沒有這個機制,它可能會被加載兩次。