blob: f182a4bfd55b24c91a19c7c7188ccfb2be99c15f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
local configs = {
lazy = {},
start = {}
}
local Plug = {
begin = vim.fn['plug#begin'],
-- "end" is a keyword, need something else
ends = function()
vim.fn['plug#end']()
for i, config in pairs(configs.start) do
config()
end
end
}
-- Not a fan of global functions, but it'll work better
-- for the people that will copy/paste this
_G.VimPlugApplyConfig = function(plugin_name)
local fn = configs.lazy[plugin_name]
if type(fn) == 'function' then fn() end
end
local plug_name = function(repo)
return repo:match("^[%w-]+/([%w-_.]+)$")
end
-- "Meta-functions"
local meta = {
-- Function call "operation"
__call = function(self, repo, opts)
opts = opts or vim.empty_dict()
-- we declare some aliases for `do` and `for`
opts['do'] = opts.run
opts.run = nil
opts['for'] = opts.ft
opts.ft = nil
vim.call('plug#', repo, opts)
-- Add basic support to colocate plugin config
if type(opts.config) == 'function' then
local plugin = opts.as or plug_name(repo)
if opts['for'] == nil and opts.on == nil then
configs.start[plugin] = opts.config
else
configs.lazy[plugin] = opts.config
local user_cmd = [[ autocmd! User %s ++once lua VimPlugApplyConfig('%s') ]]
vim.cmd(user_cmd:format(plugin, plugin))
end
end
end
}
-- Meta-tables are awesome
return setmetatable(Plug, meta)
|