VimL:gVim插件更新脚本

由于在Windows下使用gVim,没装git,所以使用VimL来写了一个一键更新插件的脚本,避免以后手动费时下载。

其原理很简单了,只是用curl获取当前git提交的commit的md5跟本地做对比,之后进行是否下载操作,当然如果需要使用的话要满足以下要求:

  • 使用pathogen,插件集中在bundle目录下。
  • 不想装git,且有MinGW环境(主要是curl和unzip)。

虽然没有太多的技术含量,但主要目的还是简单学习下VimL,脚本如下:

let s:bundles = readfile('bundle.txt')
let s:bundles_git = []
let s:unzip = 'E:\Tools\widget\uniextract\bin\unzip.exe'

for i in s:bundles
    let s:arr = split(i, '|')
    let s:plug = split(s:arr[0], '/')[-1]
    let s:md5 = matchstr(system('curl -sk ' . s:arr[0]), '\cclipboard-text=\([''"]\)\zs.\{-}\ze\1')

    if s:arr[1] !=? s:md5
        call system('curl -skLO ' . s:arr[0] . '/archive/master.zip')
        call system(s:unzip . ' -q master.zip')
        call delete('bundle/' . s:plug)
        call rename(s:plug . '-master', 'bundle/' . s:plug)
    endif

    call insert(s:bundles_git, s:arr[0] .'|' . s:md5)
endfor

call delete('master.zip')
call writefile(s:bundles_git, 'bundle.txt')

bundle.txt文件内容如:

https://github.com/mattn/emmet-vim||

然后放置到vimfiles目录下,使用source %执行,也可以使用Unite插件集成到menu下,如下图:

部分配置如下:

let g:unite_source_menu_menus.custom.candidates = {
\ 'Update Plugin' : 'cd $VIM\vimfiles | source $VIM\vimfiles\Update.vim',
\ }

这样就可以实现Vim插件的一键更新,如果你在使用中遇到任何问题请留言反馈,我会及时更正。

转载请注明: 本文《VimL:gVim插件更新脚本》来源于bstaint的博客

没有评论: