Просмотр исходного кода

added plug load order (for dependencies)

plugin directories now appear in the runtime path in the same order they
are listed. this allows plugs that depend on other plugins to be loaded
after their dependencies.
C.D. Clark III 11 лет назад
Родитель
Сommit
b763cae81a
1 измененных файлов с 9 добавлено и 1 удалено
  1. 9 1
      plug.vim

+ 9 - 1
plug.vim

@@ -88,6 +88,8 @@ function! plug#begin(...)
 
 
   let g:plug_home = home
   let g:plug_home = home
   let g:plugs = {}
   let g:plugs = {}
+  " we want to keep track of the order plugins where registered.
+  let g:plugs_order = []
 
 
   command! -nargs=+ Plug        call s:add(1, <args>)
   command! -nargs=+ Plug        call s:add(1, <args>)
   command! -nargs=* PlugInstall call s:install(<f-args>)
   command! -nargs=* PlugInstall call s:install(<f-args>)
@@ -110,7 +112,12 @@ function! plug#end()
   endwhile
   endwhile
 
 
   filetype off
   filetype off
-  for plug in values(g:plugs)
+  " we want to make sure the plugin directories are added to rtp in the same
+  " order that they are registered with the Plug command. since the s:add_rtp
+  " function uses ^= to add plugin directories to the front of the rtp, we
+  " need to loop through the plugins in reverse
+  for name in reverse(copy(g:plugs_order))
+    let plug = g:plugs[name]
     if has_key(plug, 'on')
     if has_key(plug, 'on')
       let commands = type(plug.on) == 1 ? [plug.on] : plug.on
       let commands = type(plug.on) == 1 ? [plug.on] : plug.on
       for cmd in commands
       for cmd in commands
@@ -221,6 +228,7 @@ function! s:add(...)
   let dir  = s:dirpath( fnamemodify(join([g:plug_home, name], '/'), ':p') )
   let dir  = s:dirpath( fnamemodify(join([g:plug_home, name], '/'), ':p') )
   let spec = extend(opts, { 'dir': dir, 'uri': uri })
   let spec = extend(opts, { 'dir': dir, 'uri': uri })
   let g:plugs[name] = spec
   let g:plugs[name] = spec
+  let g:plugs_order += [name]
 endfunction
 endfunction
 
 
 function! s:install(...)
 function! s:install(...)