diff --git a/autoload/vundle.vim b/autoload/vundle.vim index 3169bd1..cc0fdee 100644 --- a/autoload/vundle.vim +++ b/autoload/vundle.vim @@ -8,47 +8,55 @@ let g:vundle_loaded = 1 au BufRead,BufNewFile {bundlerc} set ft=vim -com! -nargs=+ Bundle call vundle#add_bundle() -com! -nargs=0 BundleRequire call vundle#require_bundles() +com! -nargs=+ Bundle call vundle#add_and_require_bundle() com! -nargs=0 BundleSync call vundle#sync_bundles() com! -nargs=0 BundleInstall call vundle#install_bundles() let g:bundle_dir = expand('~/.vim/bundle/') let g:bundles = [] -func! vundle#add_bundle(...) - let bundle = { 'uri': a:1 } - let bundle.name = split(a:1,'\/')[-1] " potentially break on Windows - let bundle.path = s:BundlePath(bundle.name) - if len(a:000) == 2 - if type(a:2) == type({}) | call extend(bundle, a:2) | endif - endif +func! vundle#add_bundle(uri, opts) + let bundle = a:opts + call extend(bundle, { 'uri': a:uri }) + let bundle.name = split(a:uri,'\/')[-1] " potentially break on Windows + let bundle.path = expand(g:bundle_dir.''.bundle.name) let bundle.rtpath = has_key(bundle, 'rtp') ? join([bundle.path, bundle.rtp], '/') : bundle.path call add(g:bundles, bundle) + return bundle endf -func! vundle#rc(...) - exec 'silent! so '.expand('~/.vim/bundlerc') - call vundle#require_bundles() +func! vundle#add_and_require_bundle(...) + let [uri; rest] = a:000 | let opts = {} + if len(rest) == 1 | let opts = rest[0] | endif + let bundle = vundle#add_bundle(uri, opts) + call vundle#require_bundle(bundle) endf -func! vundle#require_bundles() - let rtp = filter(split(&rtp, ','),'v:val !~# g:bundle_dir') +func! vundle#rc() + let &rtp = join(filter(split(&rtp, ','),'v:val !~# g:bundle_dir'), ',') + " TODO: Do we need this? + let bundlerc = expand('~/.vim/bundlerc') + if filereadable(expand(bundlerc)) + exec 'silent! so '.bundlerc + endif +endf + +func! vundle#require_bundle(bundle) + let bundle = a:bundle + let rtp = filter(split(&rtp, ','),'v:val !~# bundle.path') let after = [] | let before = [] - for bundle in g:bundles - let path = s:BundleRuntime(bundle) - let before += path[0] | let after += path[1] - endfor + let path = s:RuntimePath(bundle) + let before += path[0] | let after += path[1] let &rtp = join(before + rtp + after, ',') endf func! vundle#install_bundles() + exec '!mkdir -p '.g:bundle_dir call vundle#sync_bundles() call vundle#helptagify_bundles() endf func! vundle#sync_bundles() - exec '!mkdir -p '.g:bundle_dir for bundle in g:bundles let git_dir = bundle.path.'/.git' let cmd = isdirectory(git_dir) ? @@ -68,11 +76,7 @@ func! vundle#helptagify_bundles() endfor endf -func! s:BundlePath(bundle_name) - return expand(g:bundle_dir.a:bundle_name) -endf - -func! s:BundleRuntime(bundle) +func! s:RuntimePath(bundle) let before = [a:bundle.rtpath] | let after = [] let after_dir = expand(a:bundle.rtpath.'/'.'after') if isdirectory(after_dir) | let after = [after_dir] | endif diff --git a/vundle_test.sh b/vundle_test.sh index 5b99941..e37617e 100755 --- a/vundle_test.sh +++ b/vundle_test.sh @@ -3,10 +3,11 @@ setup() { curl http://github.com/gmarik/vundle/raw/master/autoload/vundle.vim > $HOME/.vim/autoload/vundle.vim echo -en "Setup: " ; [ -s $HOME/.vim/autoload/vundle.vim ] && echo "ok" || echo "fail" + rm ~/.vim/autoload/vundle.vim } install() { - vim -e -c "call vundle#rc()" -c "BundleInstall" -c "q" + vim -e -c "BundleInstall" -c "q" # echo -en "Setup: " ; [ -s $HOME/.vim/autoload/vundle.vim ] && echo "ok" || echo "fail" echo -en 'Install:'; [ -d $HOME/.vim/bundle ] && [ "$(ls -1 -d ~/.vim/bundle/*|wc -l)" = "$(grep ^Bundle ~/.vim/bundlerc|wc -l)" ] && echo 'ok' || echo 'fail' }