簡化Vim Addons Manager安裝擴展的操作

| Comments

相對Sublime的Package Control,VAM安裝和卸載擴展的操作很煩瑣。以下腳本在安裝完擴展後自動註冊,無須手工添加到vimrc,另外增加命令:UninstallAddons,從註冊表中刪除擴展。

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
set runtimepath+=~/.vim/addons/vim-addon-manager
let active_addons = []
let s:vamRegistryFile = expand('~').'/.vim/vam_registry'
if filereadable(s:vamRegistryFile)
    let active_addons += readfile(s:vamRegistryFile)
endif
call vam#ActivateAddons(active_addons)
" Addon post-install hook.
fun! MyAddonPostActivateHook(info, repository, pluginDir, opts)
    if filereadable(s:vamRegistryFile)
        let regLines = readfile(s:vamRegistryFile)
        call add(regLines, a:repository.name)
        call sort(regLines)
        call uniq(regLines)
    else
        let regLines = [a:repository.name]
    endif
    call writefile(regLines, s:vamRegistryFile)
endfun
let g:vim_addon_manager.post_install_hook_functions = ['MyAddonPostActivateHook']
" Complete the addon name.
fun! MyDoActivatedAddonsCompete(...)
    let fullList = keys(g:vim_addon_manager.activated_plugins)
    call filter(fullList, 'v:val =~ ".*'.a:1.'.*"')
    return fullList
endfun
" Remove records of addons from the registry.
fun! MyUninstallAddons(...)
    if filereadable(s:vamRegistryFile)
        let regLines = readfile(s:vamRegistryFile)
    else
        echo "Registry is empty."
        return
    endif
    for addonName in a:000
        let idx = index(regLines, addonName)
        if idx >= 0
            call remove(regLines, idx)
            echo addonName.' is removed from the registry.'
        else
            echo addonName.' cannot be found in the registry.'
        endif
    endfor
    call writefile(regLines, s:vamRegistryFile)
endfun
command! -complete=customlist,MyDoActivatedAddonsCompete -nargs=* UninstallAddons :call MyUninstallAddons(<f-args>)

Comments