vim-plug 如何管理我的 vim 插件?
How is the vim-plug managing my vim plugins?
当我检查我的 .vim
目录时,我发现用 vim-plug
安装的所有插件都位于 .vim/plugged
目录中。在这种情况下,vim 是如何加载这些插件的?如果我正常安装了相同的插件,那么加载哪个插件的权限更高?
加载插件无非是获取脚本文件。脚本文件可以在任何地方。
通常一个插件有一个标志(例如 g:variable)来检测脚本是否已经加载。所以它不会被加载两次。但是,如果您的插件没有这种机制,它可能会被加载两次。
plug#begin(...)
函数设置插件的"home"路径(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)
然后最终通过调用(最终)s:lod()
:
来操作 runtimepath
和 source
中的每一个插件
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
的代码中找出插件加载的顺序。
当我检查我的 .vim
目录时,我发现用 vim-plug
安装的所有插件都位于 .vim/plugged
目录中。在这种情况下,vim 是如何加载这些插件的?如果我正常安装了相同的插件,那么加载哪个插件的权限更高?
加载插件无非是获取脚本文件。脚本文件可以在任何地方。
通常一个插件有一个标志(例如 g:variable)来检测脚本是否已经加载。所以它不会被加载两次。但是,如果您的插件没有这种机制,它可能会被加载两次。
plug#begin(...)
函数设置插件的"home"路径(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)
然后最终通过调用(最终)s:lod()
:
runtimepath
和 source
中的每一个插件
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
的代码中找出插件加载的顺序。