commit 71780e04a20b4c66141208072025e8f2a555b4bc Author: Yann Esposito (Yogsototh) Date: Thu May 30 12:06:12 2013 +0200 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..76cacfc --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +This is my vim configuration. I cleaned it up most of the stuff. + +The `vimrc` file should be easy to understand and contains almost everything. + +# Install + + git clone https://github.com/yogsototh/vimrc.git .vim + ln -s .vim/vimrc .vimrc + vim +BundleInstall +qall + +for Haskell + + cabal install ghc-mod + +And you're done. diff --git a/vimrc b/vimrc new file mode 100644 index 0000000..235b099 --- /dev/null +++ b/vimrc @@ -0,0 +1,102 @@ +" Yann Esposito +" http://yannesposito.com +" @yogsototh +" +" --- Plugins --- +" To install plugin the first time: +" > vim +BundleInstall +qall +" ----------- +filetype off +set rtp+=~/.vim/vundle/vundleinit/ +call vundle#rc() +" the vundle plugin to install vim plugin +Bundle 'gmarik/vundle' +" completion during typing +Bundle 'neocomplcache' +" solarized colorscheme +Bundle 'altercation/vim-colors-solarized' +" writing pandoc documents +Bundle 'vim-pandoc/vim-pandoc' +" show which line changed using git +Bundle 'airblade/vim-gitgutter' +" Haskell mode +Bundle 'lukerandall/haskellmode-vim' +" neocomplcache plugin for Haskell +" IMPORTANT you need to 'cabal install ghc-mod' +Bundle 'ujihisa/neco-ghc' +" Yesod templates +Bundle 'pbrisbin/html-template-syntax' +filetype on + + +" ################### +" ### Plugin conf ### +" ################### + +" -- vim-gitgutter +highlight clear SignColumn + +" NERDTree +let NERDTreeIgnore=['\.o$','\~$','\.hi$'] + +" neocomplcache (advanced completion) +let g:neocomplcache_enable_at_startup = 1 + +" -- Haskell +au Bufenter *.hs compiler ghc +au Bufenter *.lhs compiler ghc +let g:haddock_browser="/usr/bin/firefox" + +" -- vim-gitgutter +highlight clear SignColumn + +" -- show the column 81 +if (exists('+colorcolumn')) + highlight ColorColumn ctermbg=7 + set colorcolumn=80 +endif + +" -- solarized theme +set background=light +" My terminal handle solarized theme correctly +" so solarized only for GUI +if has('gui_running') + " color theme solarized both on gui and standard + colorscheme solarized +endif + +" -- neco-ghc +let g:necoghc_enable_detailed_browse=1 +let $PATH=$PATH.':'.expand("~/.cabal/bin") + +" ##################### +" ### Personal conf ### +" ##################### + +" Use Vim settings, rather then Vi settings (much better!). +" This must be first, because it changes other options as a side effect. +set nocompatible +set bs=2 " allow backspacing over everything in insert mode +set viminfo='20,\"50 " read/write a .viminfo file, don't store more + " than 50 lines of registers +set history=10000 " keep 100000 lines of command line history +set ruler " show the cursor position all the time + +" move between splits +noremap h +noremap j +noremap k +noremap l + +" -- sudo save +cmap w!! w !sudo tee >/dev/null % + +" Tabulation management +set tabstop=4 +set softtabstop=4 +set shiftwidth=4 +set expandtab +set autoindent +set smartindent +set cindent +set cinoptions=(0,u0,U0 diff --git a/vundle/vundleinit/LICENSE-MIT.txt b/vundle/vundleinit/LICENSE-MIT.txt new file mode 100644 index 0000000..003904d --- /dev/null +++ b/vundle/vundleinit/LICENSE-MIT.txt @@ -0,0 +1,7 @@ +Copyright (C) 2010 http://github.com/gmarik + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vundle/vundleinit/README.md b/vundle/vundleinit/README.md new file mode 100644 index 0000000..32ddb14 --- /dev/null +++ b/vundle/vundleinit/README.md @@ -0,0 +1,142 @@ +## About + +[Vundle] is short for _Vim bundle_ and is a [Vim] plugin manager. + +![Vundle-installer](http://25.media.tumblr.com/tumblr_m8m96w06G81r39828o1_1280.png) + +## Quick start + +1. Setup [Vundle]: + + ``` + $ git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle + ``` + +2. Configure bundles: + + Sample `.vimrc`: + + ```vim + set nocompatible " be iMproved + filetype off " required! + + set rtp+=~/.vim/bundle/vundle/ + call vundle#rc() + + " let Vundle manage Vundle + " required! + Bundle 'gmarik/vundle' + + " My Bundles here: + " + " original repos on github + Bundle 'tpope/vim-fugitive' + Bundle 'Lokaltog/vim-easymotion' + Bundle 'rstacruz/sparkup', {'rtp': 'vim/'} + Bundle 'tpope/vim-rails.git' + " vim-scripts repos + Bundle 'L9' + Bundle 'FuzzyFinder' + " non github repos + Bundle 'git://git.wincent.com/command-t.git' + " ... + + filetype plugin indent on " required! + " + " Brief help + " :BundleList - list configured bundles + " :BundleInstall(!) - install(update) bundles + " :BundleSearch(!) foo - search(or refresh cache first) for foo + " :BundleClean(!) - confirm(or auto-approve) removal of unused bundles + " + " see :h vundle for more details or wiki for FAQ + " NOTE: comments after Bundle command are not allowed.. + + ``` + +3. Install configured bundles: + + Launch `vim`, run `:BundleInstall` + (or `vim +BundleInstall +qall` for CLI lovers) + + *Windows users* see [Vundle for Windows](https://github.com/gmarik/vundle/wiki/Vundle-for-Windows) + + Installing requires [Git] and triggers [Git clone](http://gitref.org/creating/#clone) for each configured repo to `~/.vim/bundle/`. + +4. Consider [donating](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=T44EJZX8RBUWY) + +[*Thank you*](http://j.mp/rSbm01) for supporting this project! ) + + +## Why Vundle + +[Vundle] allows to: + +- keep track and configure your scripts right in `.vimrc` +- [install] configured scripts (aka bundle) +- [update] configured scripts +- [search] by name [all available vim scripts] +- [clean] unused scripts up +- run above actions in a *single keypress* with [interactive mode] + +Also [Vundle]: + +- manages runtime path of your installed scripts +- regenerates helptag automatically + +## Docs + +see [`:h vundle`](vundle/blob/master/doc/vundle.txt#L1) vimdoc for more details. + +## People Using Vundle + +see [Examples](/gmarik/vundle/wiki/Examples) + +## FAQ + +see [wiki](/gmarik/vundle/wiki) + +## Contributors + + see [vundle contributors](https://github.com/gmarik/vundle/graphs/contributors) + +*Thank you!* + +## Inspiration and ideas from + +* [pathogen] +* [bundler] +* [Scott Bronson](http://github.com/bronson) + +## Also + +* Vundle was developed and tested with [Vim] 7.3 on `OSX`, `Linux` and `Windows` +* Vundle tries to be as [KISS](http://en.wikipedia.org/wiki/KISS_principle) as possible + +## TODO: +[Vundle] is a work in progress so any ideas/patches appreciated + +* √ activate newly added bundles on .vimrc reload or after :BundleInstall +* √ use preview window for search results +* √ vim documentation +* √ put vundle to bundles/ too(will fix vundle help) +* √ tests +* √ improve error handling +* allow specify revision/version? +* handle dependencies +* show description in search results +* search by description as well +* make it rock! + +[Vundle]:http://github.com/gmarik/vundle +[Pathogen]:http://github.com/tpope/vim-pathogen/ +[Bundler]:http://github.com/wycats/bundler/ +[Vim]:http://www.vim.org +[Git]:http://git-scm.com +[all available vim scripts]:http://vim-scripts.org/vim/scripts.html + +[install]:https://github.com/gmarik/vundle/blob/master/doc/vundle.txt#L110-124 +[update]:https://github.com/gmarik/vundle/blob/master/doc/vundle.txt#L128-134 +[search]:https://github.com/gmarik/vundle/blob/master/doc/vundle.txt#L136-158 +[clean]:https://github.com/gmarik/vundle/blob/master/doc/vundle.txt#L168-180 +[interactive mode]:https://github.com/gmarik/vundle/blob/master/doc/vundle.txt#L184-210 diff --git a/vundle/vundleinit/autoload/vundle.vim b/vundle/vundleinit/autoload/vundle.vim new file mode 100644 index 0000000..0bc7bf5 --- /dev/null +++ b/vundle/vundleinit/autoload/vundle.vim @@ -0,0 +1,48 @@ +" Vundle is a shortcut for Vim Bundle and Is a simple plugin manager for Vim +" Author: gmarik +" HomePage: http://github.com/gmarik/vundle +" Readme: http://github.com/gmarik/vundle/blob/master/README.md +" Version: 0.9 + +com! -nargs=+ Bundle +\ call vundle#config#bundle() + +com! -nargs=? -bang -complete=custom,vundle#scripts#complete BundleInstall +\ call vundle#installer#new('!' == '', ) + +com! -nargs=? -bang -complete=custom,vundle#scripts#complete BundleSearch +\ call vundle#scripts#all('!'=='', ) + +com! -nargs=? -bang -complete=custom,vundle#scripts#complete Bundles +\ call vundle#scripts#all('!'=='', ) + +com! -nargs=0 -bang BundleList +\ call vundle#installer#list('!'=='') + +com! -nargs=? -bang BundleClean +\ call vundle#installer#clean('!' == '') + +com! -nargs=0 BundleDocs +\ call vundle#installer#helptags(g:bundles) + +" Aliases +com! BundleUpdate BundleInstall! + +if (has('signs')) +sign define Vu_error text=! texthl=Error +sign define Vu_active text=> texthl=Comment +sign define Vu_todate text=. texthl=Comment +sign define Vu_new text=+ texthl=Comment +sign define Vu_updated text=* texthl=Comment +sign define Vu_deleted text=- texthl=Comment +sign define Vu_helptags text=* texthl=Comment +endif + + +func! vundle#rc(...) abort + let g:bundle_dir = len(a:000) > 0 ? expand(a:1, 1) : expand('$HOME/.vim/bundle', 1) + let g:updated_bundles = [] + let g:vundle_log = [] + let g:vundle_changelog = ['Updated Bundles:'] + call vundle#config#init() +endf diff --git a/vundle/vundleinit/autoload/vundle/config.vim b/vundle/vundleinit/autoload/vundle/config.vim new file mode 100644 index 0000000..55c7d7d --- /dev/null +++ b/vundle/vundleinit/autoload/vundle/config.vim @@ -0,0 +1,106 @@ +func! vundle#config#bundle(arg, ...) + let bundle = vundle#config#init_bundle(a:arg, a:000) + call s:rtp_rm_a() + call add(g:bundles, bundle) + call s:rtp_add_a() + return bundle +endf + +func! vundle#config#init() + if !exists('g:bundles') | let g:bundles = [] | endif + call s:rtp_rm_a() + let g:bundles = [] +endf + +func! vundle#config#require(bundles) abort + for b in a:bundles + call s:rtp_add(b.rtpath) + call s:rtp_add(g:bundle_dir) + " TODO: it has to be relative rtpath, not bundle.name + exec 'runtime! '.b.name.'/plugin/*.vim' + exec 'runtime! '.b.name.'/after/*.vim' + call s:rtp_rm(g:bundle_dir) + endfor +endf + +func! vundle#config#init_bundle(name, opts) + let opts = extend(s:parse_options(a:opts), s:parse_name(substitute(a:name,"['".'"]\+','','g'))) + let b = extend(opts, copy(s:bundle)) + let b.rtpath = s:rtpath(opts) + return b +endf + +func! s:parse_options(opts) + " TODO: improve this + if len(a:opts) != 1 | return {} | endif + + if type(a:opts[0]) == type({}) + return a:opts[0] + else + return {'rev': a:opts[0]} + endif +endf + +func! s:parse_name(arg) + let arg = a:arg + let git_proto = exists('g:vundle_default_git_proto') ? g:vundle_default_git_proto : 'https' + + if arg =~? '^\s*\(gh\|github\):\S\+' + \ || arg =~? '^[a-z0-9][a-z0-9-]*/[^/]\+$' + let uri = git_proto.'://github.com/'.split(arg, ':')[-1] + if uri !~? '\.git$' + let uri .= '.git' + endif + let name = substitute(split(uri,'\/')[-1], '\.git\s*$','','i') + elseif arg =~? '^\s*\(git@\|git://\)\S\+' + \ || arg =~? '\(file\|https\?\)://' + \ || arg =~? '\.git\s*$' + let uri = arg + let name = split( substitute(uri,'/\?\.git\s*$','','i') ,'\/')[-1] + else + let name = arg + let uri = git_proto.'://github.com/vim-scripts/'.name.'.git' + endif + return {'name': name, 'uri': uri, 'name_spec': arg } +endf + +func! s:rtp_rm_a() + let paths = map(copy(g:bundles), 'v:val.rtpath') + let prepends = join(paths, ',') + let appends = join(paths, '/after,').'/after' + exec 'set rtp-='.fnameescape(prepends) + exec 'set rtp-='.fnameescape(appends) +endf + +func! s:rtp_add_a() + let paths = map(copy(g:bundles), 'v:val.rtpath') + let prepends = join(paths, ',') + let appends = join(paths, '/after,').'/after' + exec 'set rtp^='.fnameescape(prepends) + exec 'set rtp+='.fnameescape(appends) +endf + +func! s:rtp_rm(dir) abort + exec 'set rtp-='.fnameescape(expand(a:dir, 1)) + exec 'set rtp-='.fnameescape(expand(a:dir.'/after', 1)) +endf + +func! s:rtp_add(dir) abort + exec 'set rtp^='.fnameescape(expand(a:dir, 1)) + exec 'set rtp+='.fnameescape(expand(a:dir.'/after', 1)) +endf + +func! s:expand_path(path) abort + return simplify(expand(a:path, 1)) +endf + +func! s:rtpath(opts) + return has_key(a:opts, 'rtp') ? s:expand_path(a:opts.path().'/'.a:opts.rtp) : a:opts.path() +endf + +let s:bundle = {} + +func! s:bundle.path() + return s:expand_path(g:bundle_dir.'/'.self.name) +endf + diff --git a/vundle/vundleinit/autoload/vundle/installer.vim b/vundle/vundleinit/autoload/vundle/installer.vim new file mode 100644 index 0000000..d78a999 --- /dev/null +++ b/vundle/vundleinit/autoload/vundle/installer.vim @@ -0,0 +1,274 @@ +func! vundle#installer#new(bang, ...) abort + let bundles = (a:1 == '') ? + \ g:bundles : + \ map(copy(a:000), 'vundle#config#bundle(v:val, {})') + + let names = vundle#scripts#bundle_names(map(copy(bundles), 'v:val.name_spec')) + call vundle#scripts#view('Installer',['" Installing bundles to '.expand(g:bundle_dir, 1)], names + ['Helptags']) + + call s:process(a:bang, (a:bang ? 'add!' : 'add')) + + call vundle#config#require(bundles) +endf + + +func! s:process(bang, cmd) + let msg = '' + + redraw + sleep 1m + + let lines = (getline('.','$')[0:-2]) + + for line in lines + redraw + + exec ':norm '.a:cmd + + if 'error' == g:vundle_last_status + let msg = 'With errors; press l to view log' + endif + + if 'updated' == g:vundle_last_status && empty(msg) + let msg = 'Bundles updated; press u to view changelog' + endif + + " goto next one + exec ':+1' + + setl nomodified + endfor + + redraw + echo 'Done! '.msg +endf + +func! vundle#installer#run(func_name, name, ...) abort + let n = a:name + + echo 'Processing '.n + call s:sign('active') + + sleep 1m + + let status = call(a:func_name, a:1) + + call s:sign(status) + + redraw + + if 'new' == status + echo n.' installed' + elseif 'updated' == status + echo n.' updated' + elseif 'todate' == status + echo n.' already installed' + elseif 'deleted' == status + echo n.' deleted' + elseif 'helptags' == status + echo n.' regenerated' + elseif 'error' == status + echohl Error + echo 'Error processing '.n + echohl None + sleep 1 + else + throw 'whoops, unknown status:'.status + endif + + let g:vundle_last_status = status + + return status +endf + +func! s:sign(status) + if (!has('signs')) + return + endif + + exe ":sign place ".line('.')." line=".line('.')." name=Vu_". a:status ." buffer=" . bufnr("%") +endf + +func! vundle#installer#install_and_require(bang, name) abort + let result = vundle#installer#install(a:bang, a:name) + let b = vundle#config#bundle(a:name, {}) + call vundle#installer#helptags([b]) + call vundle#config#require([b]) + return result +endf + +func! vundle#installer#install(bang, name) abort + if !isdirectory(g:bundle_dir) | call mkdir(g:bundle_dir, 'p') | endif + + let b = vundle#config#init_bundle(a:name, {}) + + return s:sync(a:bang, b) +endf + +func! vundle#installer#docs() abort + call vundle#installer#helptags(g:bundles) + return 'helptags' +endf + +func! vundle#installer#helptags(bundles) abort + let bundle_dirs = map(copy(a:bundles),'v:val.rtpath') + let help_dirs = filter(bundle_dirs, 's:has_doc(v:val)') + + call s:log('') + call s:log('Helptags:') + + call map(copy(help_dirs), 's:helptags(v:val)') + + call s:log('Helptags: '.len(help_dirs).' bundles processed') + + return help_dirs +endf + +func! vundle#installer#list(bang) abort + let bundles = vundle#scripts#bundle_names(map(copy(g:bundles), 'v:val.name_spec')) + call vundle#scripts#view('list', ['" My Bundles'], bundles) + redraw + echo len(g:bundles).' bundles configured' +endf + + +func! vundle#installer#clean(bang) abort + let bundle_dirs = map(copy(g:bundles), 'v:val.path()') + let all_dirs = (v:version > 702 || (v:version == 702 && has("patch51"))) + \ ? split(globpath(g:bundle_dir, '*', 1), "\n") + \ : split(globpath(g:bundle_dir, '*'), "\n") + let x_dirs = filter(all_dirs, '0 > index(bundle_dirs, v:val)') + + if empty(x_dirs) + let headers = ['" All clean!'] + let names = [] + else + let headers = ['" Removing bundles:'] + let names = vundle#scripts#bundle_names(map(copy(x_dirs), 'fnamemodify(v:val, ":t")')) + end + + call vundle#scripts#view('clean', headers, names) + redraw + + if (a:bang || empty(names)) + call s:process(a:bang, 'D') + else + call inputsave() + let response = input('Continue? [Y/n]: ') + call inputrestore() + if (response =~? 'y' || response == '') + call s:process(a:bang, 'D') + endif + endif +endf + + +func! vundle#installer#delete(bang, dir_name) abort + + let cmd = (has('win32') || has('win64')) ? + \ 'rmdir /S /Q' : + \ 'rm -rf' + + let bundle = vundle#config#init_bundle(a:dir_name, {}) + let cmd .= ' '.shellescape(bundle.path()) + + let out = s:system(cmd) + + call s:log('') + call s:log('Bundle '.a:dir_name) + call s:log('$ '.cmd) + call s:log('> '.out) + + if 0 != v:shell_error + return 'error' + else + return 'deleted' + endif +endf + +func! s:has_doc(rtp) abort + return isdirectory(a:rtp.'/doc') + \ && (!filereadable(a:rtp.'/doc/tags') || filewritable(a:rtp.'/doc/tags')) + \ && (v:version > 702 || (v:version == 702 && has("patch51"))) + \ ? !(empty(glob(a:rtp.'/doc/*.txt', 1)) && empty(glob(a:rtp.'/doc/*.??x', 1))) + \ : !(empty(glob(a:rtp.'/doc/*.txt')) && empty(glob(a:rtp.'/doc/*.??x'))) +endf + +func! s:helptags(rtp) abort + let doc_path = a:rtp.'/doc/' + call s:log(':helptags '.doc_path) + try + helptags `=doc_path` + catch + call s:log("> Error running :helptags ".doc_path) + endtry +endf + +func! s:sync(bang, bundle) abort + let git_dir = expand(a:bundle.path().'/.git/', 1) + if isdirectory(git_dir) || filereadable(expand(a:bundle.path().'/.git', 1)) + if !(a:bang) | return 'todate' | endif + let cmd = 'cd '.shellescape(a:bundle.path()).' && git pull && git submodule update --init --recursive' + + let cmd = g:shellesc_cd(cmd) + + let get_current_sha = 'cd '.shellescape(a:bundle.path()).' && git rev-parse HEAD' + let get_current_sha = g:shellesc_cd(get_current_sha) + let initial_sha = s:system(get_current_sha)[0:15] + else + let cmd = 'git clone --recursive '.shellescape(a:bundle.uri).' '.shellescape(a:bundle.path()) + let initial_sha = '' + endif + + let out = s:system(cmd) + call s:log('') + call s:log('Bundle '.a:bundle.name_spec) + call s:log('$ '.cmd) + call s:log('> '.out) + + if 0 != v:shell_error + return 'error' + end + + if empty(initial_sha) + return 'new' + endif + + let updated_sha = s:system(get_current_sha)[0:15] + + if initial_sha == updated_sha + return 'todate' + endif + + call add(g:updated_bundles, [initial_sha, updated_sha, a:bundle]) + return 'updated' +endf + +func! g:shellesc(cmd) abort + if (has('win32') || has('win64')) + if &shellxquote != '(' " workaround for patch #445 + return '"'.a:cmd.'"' " enclose in quotes so && joined cmds work + endif + endif + return a:cmd +endf + +func! g:shellesc_cd(cmd) abort + if (has('win32') || has('win64')) + let cmd = substitute(a:cmd, '^cd ','cd /d ','') " add /d switch to change drives + let cmd = g:shellesc(cmd) + return cmd + else + return a:cmd + endif +endf + +func! s:system(cmd) abort + return system(a:cmd) +endf + +func! s:log(str) abort + let fmt = '%y%m%d %H:%M:%S' + call add(g:vundle_log, '['.strftime(fmt).'] '.a:str) + return a:str +endf diff --git a/vundle/vundleinit/autoload/vundle/scripts.vim b/vundle/vundleinit/autoload/vundle/scripts.vim new file mode 100644 index 0000000..64a3301 --- /dev/null +++ b/vundle/vundleinit/autoload/vundle/scripts.vim @@ -0,0 +1,188 @@ +func! vundle#scripts#all(bang, ...) + let b:match = '' + let info = ['"Keymap: i - Install bundle; c - Cleanup; s - Search; R - Reload list'] + let matches = s:load_scripts(a:bang) + if !empty(a:1) + let matches = filter(matches, 'v:val =~? "'.escape(a:1,'"').'"') + let info += ['"Search results for: '.a:1] + " TODO: highlight matches + let b:match = a:1 + endif + call vundle#scripts#view('search',info, vundle#scripts#bundle_names(reverse(matches))) + redraw + echo len(matches).' bundles found' +endf + +func! vundle#scripts#reload() abort + silent exec ':BundleSearch! '.(exists('b:match') ? b:match : '') + redraw +endf + +func! vundle#scripts#complete(a,c,d) + return join(s:load_scripts(0),"\n") +endf + +func! s:view_log() + if !exists('g:vundle_log_file') + let g:vundle_log_file = tempname() + endif + + call writefile(g:vundle_log, g:vundle_log_file) + silent pedit `=g:vundle_log_file` + + wincmd P | wincmd H +endf + +func! s:create_changelog() abort + for bundle_data in g:updated_bundles + let initial_sha = bundle_data[0] + let updated_sha = bundle_data[1] + let bundle = bundle_data[2] + + let cmd = 'cd '.shellescape(bundle.path()). + \ ' && git log --pretty=format:"%s %an, %ar" --graph '. + \ initial_sha.'..'.updated_sha + + let cmd = g:shellesc_cd(cmd) + + let updates = system(cmd) + + call add(g:vundle_changelog, '') + call add(g:vundle_changelog, 'Updated Bundle: '.bundle.name) + + if bundle.uri =~ "https://github.com" + call add(g:vundle_changelog, 'Compare at: '.bundle.uri[0:-5].'/compare/'.initial_sha.'...'.updated_sha) + endif + + for update in split(updates, '\n') + let update = substitute(update, '\s\+$', '', '') + call add(g:vundle_changelog, ' '.update) + endfor + endfor +endf + +func! s:view_changelog() + call s:create_changelog() + + if !exists('g:vundle_changelog_file') + let g:vundle_changelog_file = tempname() + endif + + call writefile(g:vundle_changelog, g:vundle_changelog_file) + silent pedit `=g:vundle_changelog_file` + + wincmd P | wincmd H +endf + +func! vundle#scripts#bundle_names(names) + return map(copy(a:names), ' printf("Bundle ' ."'%s'".'", v:val) ') +endf + +func! vundle#scripts#view(title, headers, results) + if exists('g:vundle_view') && bufloaded(g:vundle_view) + exec g:vundle_view.'bd!' + endif + + exec 'silent pedit [Vundle] '.a:title + + wincmd P | wincmd H + + let g:vundle_view = bufnr('%') + " + " make buffer modifiable + " to append without errors + set modifiable + + call append(0, a:headers + a:results) + + setl buftype=nofile + setl noswapfile + + setl cursorline + setl nonu ro noma ignorecase + if (exists('&relativenumber')) | setl norelativenumber | endif + + setl ft=vundle + setl syntax=vim + syn keyword vimCommand Bundle + syn keyword vimCommand Helptags + + com! -buffer -bang -nargs=1 DeleteBundle + \ call vundle#installer#run('vundle#installer#delete', split(,',')[0], ['!' == '', ]) + + com! -buffer -bang -nargs=? InstallAndRequireBundle + \ call vundle#installer#run('vundle#installer#install_and_require', split(,',')[0], ['!' == '', ]) + + com! -buffer -bang -nargs=? InstallBundle + \ call vundle#installer#run('vundle#installer#install', split(,',')[0], ['!' == '', ]) + + com! -buffer -bang -nargs=0 InstallHelptags + \ call vundle#installer#run('vundle#installer#docs', 'helptags', []) + + com! -buffer -nargs=0 VundleLog call s:view_log() + + com! -buffer -nargs=0 VundleChangelog call s:view_changelog() + + nnoremap q :silent bd! + nnoremap D :exec 'Delete'.getline('.') + + nnoremap add :exec 'Install'.getline('.') + nnoremap add! :exec 'Install'.substitute(getline('.'), '^Bundle ', 'Bundle! ', '') + + nnoremap i :exec 'InstallAndRequire'.getline('.') + nnoremap I :exec 'InstallAndRequire'.substitute(getline('.'), '^Bundle ', 'Bundle! ', '') + + nnoremap l :VundleLog + nnoremap u :VundleChangelog + nnoremap h :h vundle + nnoremap ? :norm h + + nnoremap c :BundleClean + nnoremap C :BundleClean! + + nnoremap s :BundleSearch + nnoremap R :call vundle#scripts#reload() + + " goto first line after headers + exec ':'.(len(a:headers) + 1) +endf + +func! s:fetch_scripts(to) + let scripts_dir = fnamemodify(expand(a:to, 1), ":h") + if !isdirectory(scripts_dir) + call mkdir(scripts_dir, "p") + endif + + let l:vim_scripts_json = 'http://vim-scripts.org/api/scripts.json' + if executable("curl") + let cmd = 'curl --fail -s -o '.shellescape(a:to).' '.l:vim_scripts_json + elseif executable("wget") + let temp = shellescape(tempname()) + let cmd = 'wget -q -O '.temp.' '.l:vim_scripts_json. ' && mv -f '.temp.' '.shellescape(a:to) + if (has('win32') || has('win64')) + let cmd = substitute(cmd, 'mv -f ', 'move /Y ', '') " change force flag + let cmd = g:shellesc(cmd) + end + else + echoerr 'Error curl or wget is not available!' + return 1 + endif + + call system(cmd) + + if (0 != v:shell_error) + echoerr 'Error fetching scripts!' + return v:shell_error + endif + return 0 +endf + +func! s:load_scripts(bang) + let f = expand(g:bundle_dir.'/.vundle/script-names.vim-scripts.org.json', 1) + if a:bang || !filereadable(f) + if 0 != s:fetch_scripts(f) + return [] + end + endif + return eval(readfile(f, 'b')[0]) +endf diff --git a/vundle/vundleinit/doc/vundle.txt b/vundle/vundleinit/doc/vundle.txt new file mode 100644 index 0000000..57e7260 --- /dev/null +++ b/vundle/vundleinit/doc/vundle.txt @@ -0,0 +1,235 @@ +*vundle.txt* Vundle the plug-in manager for Vim. *vundle* + +CONTENTS ~ + *vundle-contents* +=========================================================================== + +1. About |vundle-about| +2. Why Vundle |vundle-why-vundle| +3. Quick start |vundle-quickstart| +4. Scripts |vundle-scripts| + 4.1. Configure scripts |vundle-scripts-configure| + 4.2. Installing scripts |vundle-scripts-install| + 4.3. Updating scripts |vundle-scripts-update| + 4.4. Searching scripts |vundle-scripts-search| + 4.5. Listing scripts |vundle-scripts-list| + 4.6. Cleanup |vundle-scripts-cleanup| +5. Interactive mode |vundle-interactive| +6. Key mappings |vundle-keymappings| +7. Options |vundle-options| + +=========================================================================== + +ABOUT *vundle-about* + +Vundle is a short cut for Vim bundle and is the Vim plug-in manager. + +2. WHY VUNDLE ~ + *vundle-why-vundle* +Vundle allows to: + +- keep track and configure your scripts right in `.vimrc` +- install configured scripts (aka bundle) +- update configured scripts +- search [all available vim scripts] by name +- clean up from unused scripts + +Also *Vundle* : + +- manages runtime path of your installed scripts +- regenerates helptags automatically + +Vundle takes advantage of [vim-scripts.org](http://vim-scripts.org) +in order to install/search [all available vim scripts] + +3. QUICK START ~ + *vundle-quickstart* +1) Setup Vundle: > + + git clone http://github.com/gmarik/vundle.git ~/.vim/vundle.git + +2) Configure bundles: + + Sample `.vimrc`: > + + set nocompatible " be iMproved + filetype off " required! + + set rtp+=~/.vim/vundle.git/ + call vundle#rc() + + " let Vundle manage Vundle + Bundle 'gmarik/vundle' + + " My Bundles here: + " + " original repos on github + Bundle 'tpope/vim-fugitive' + Bundle 'Lokaltog/vim-easymotion' + Bundle 'rstacruz/sparkup', {'rtp': 'vim/'} + " vim-scripts repos + Bundle 'L9' + Bundle 'FuzzyFinder' + Bundle 'rails.vim' + " non github repos + Bundle 'git://git.wincent.com/command-t.git' + " ... + + filetype plugin indent on " required! + " or + " filetype plugin on " to not use the indentation settings set by plugins + +3) Install configured bundles: + + Launch `vim`, run > + + :BundleInstall + +Installing requires [Git] and triggers [Git clone](http://gitref.org/creating/#clone) for +each configured repo to `~/.vim/bundle/`. + +4. SCRIPTS ~ + *vundle-scripts* +4.1 CONFIGURE SCRIPTS ~ + *vundle-scripts-configure* *Bundle* +Before installing scripts they need to be configured. It's done using `Bundle` +command in `.vimrc`: > + + Bundle 'git_repo_uri' " 'git_repo_uri' should be a valid uri to git repository +or > + Bundle 'script_name' " 'script-name' should be an official script name (see |vundle-scripts-search| ) + +Vundle loves Github, that's why short uris can be used with commands: > + + Bundle 'tpope/vim-fugitive' + +equals full uri > + + Bundle 'http://github.com/tpope/vim-fugitive.git' + +NOTE: Vundle defaults to http:// protocol for the short URIs + + +4.2 INSTALL SCRIPTS ~ + *vundle-scripts-install* *BundleInstall* +run > + :BundleInstall + +installs configured scripts. Newly installed scripts will be automatically +enabled. Except special cases requiring compilation or pre-configuration. + +BundleInstall allows to install scripts by name:> + + :BundleInstall unite.vim + +installs and activates unite.vim. You can use Tab to auto-complete known script names. +NOTE: installation, as just described, doesn't automatically configure scripts; +you have to configure them manually. + +4.3 UPDATE SCRIPTS ~ + *vundle-scripts-update* *BundleInstall!* +run > + :BundleInstall! " NOTE: bang(!) + +installs or updates configured scripts. +press u after updates complete to see the changelog of all updated bundles. + +4.4 SEARCHING ~ + *vundle-scripts-search* *BundleSearch* +run > + :BundleSearch foo + +lists bundles matching 'foo' in new a new split window, ie: +> + Bundle "VimFootnotes" + Bundle "foo.vim" +> +and > + + :BundleSearch! foo + +refreshes script list before performing actual search. + +If command is run without argument: > + + :BundleSearch! + +it will display all known scripts + +Searching requires [`curl`](http://curl.haxx.se/) + +4.5 LISTING BUNDLES ~ + *vundle-scripts-list* *BundleList* + +To quickly pull list of installed bundles use > + + :BundleList + + +4.6 CLEANING UP ~ + *vundle-scripts-cleanup* *BundleClean* +run > + + :BundleClean + +confirms removal of unused script-dirs from `.vim/bundle/`. + + *BundleClean!* +> + :BundleClean! + +removes unused dirs with no questions. + + + *vundle-interactive* +5. INTERACTIVE MODE ~ + +Vundle provides simple interactive mode to help you explore new scripts easily. +Interactive mode is available as result of any commands that display list of +bundles. For instance, running: > + + :BundleSearch! unite + +triggers search for scripts matching 'unite' and yields a split window with +content: > + + "Keymap: i - Install bundle; c - Cleanup; r - Refine list; R - Reload list + "Search results for: unite + Bundle 'unite.vim' + Bundle 'unite-yarm' + Bundle 'unite-gem' + Bundle 'unite-locate' + Bundle 'unite-font' + Bundle 'unite-colorscheme' + +As the first line(starting with `"Keymap:`) shows, certain actions may be applied +to selected bundles . Move cursor over line `Bundle 'unite.vim'` and press i +key(install, see |vundle-keymappings| for more details). +After unite.vim is installed - `:Unite file` command should be +available to prove 'unite.vim' availability. + +NOTE: Interactive installation doesn't update your .vimrc configuration. + + *vundle-keymappings* +6. KEY MAPPINGS ~ + +KEY | DESCRIPTION +----|-------------------------- > + i | run :BundleInstall with name taken from line cursor is positioned on + I | same as i, but runs :BundleInstall! to update bundle + D | delete selected bundle( be careful not to remove local modifications) + c | run :BundleClean + s | run :BundleSearch + R | fetch fresh script list from server +. + + *vundle-options* +7. OPTIONS ~ + +> + let g:vundle_default_git_proto = 'git' + +makes Vundle use `git` instead default `https` when building absolute repo URIs + + +vim:tw=78:ts=8:ft=help:norl: diff --git a/vundle/vundleinit/test/files/test.erl b/vundle/vundleinit/test/files/test.erl new file mode 100644 index 0000000..1672953 --- /dev/null +++ b/vundle/vundleinit/test/files/test.erl @@ -0,0 +1,20 @@ +-module(mmc_logmon_sup). +-behaviour(supervisor). +-export([init/1]). + +init(_) -> + {ok, { + {one_for_one, 5, 1}, + [ + {listener, + {aaa, start_link, []}, + permanent, 100, worker, + [aaa] + }, + {server, + {bbb, start_link, []}, + permanent, 100, worker, + [bbb] + } + ] + }}. diff --git a/vundle/vundleinit/test/minirc.vim b/vundle/vundleinit/test/minirc.vim new file mode 100644 index 0000000..352d9bc --- /dev/null +++ b/vundle/vundleinit/test/minirc.vim @@ -0,0 +1,8 @@ +set nocompatible +syntax on +filetype off +set rtp+=~/.vim/bundle/vundle/ +call vundle#rc() +Bundle 'gmarik/vundle' +filetype plugin indent on + diff --git a/vundle/vundleinit/test/vimrc b/vundle/vundleinit/test/vimrc new file mode 100644 index 0000000..662709f --- /dev/null +++ b/vundle/vundleinit/test/vimrc @@ -0,0 +1,76 @@ +" vim -u test/vimrc +set nocompatible + +set nowrap + +let root = '/tmp/!vundle-test/bundles/' +let src = 'http://github.com/gmarik/vundle.git' + +" let src = '~/.vim/bundle/vundle/.git' + +" Vundle Options +" let g:vundle_default_git_proto = 'git' + +if !isdirectory(expand(root, 1).'/vundle') + exec '!git clone '.src.' '.shellescape(root, 1).'/vundle' +endif + +filetype off +syntax on + +runtime macros/matchit.vim + +exec 'set rtp+='.root.'/vundle' + +call vundle#rc(root) + +Bundle "gmarik/vundle" + +" vim-scripts name +Bundle 'molokai' + +" github username with dashes +Bundle 'vim-scripts/ragtag.vim' + +" original repo +Bundle 'altercation/vim-colors-solarized' +" with extension +Bundle 'nelstrom/vim-mac-classic-theme.git' +" +" invalid uri +Bundle 'nonexistinguser/yupppierepo.git' + +" full uri +Bundle 'https://github.com/vim-scripts/vim-game-of-life' +" full uri +Bundle 'git@github.com:gmarik/ingretu.git' +" short uri +Bundle 'gh:gmarik/snipmate.vim.git' +Bundle 'github:mattn/gist-vim.git' + +" local uri stuff +Bundle '~/Dropbox/.gitrepos/utilz.vim.git' +" Bundle 'file://Dropbox/.gitrepos/utilz.vim.git' + +" with options +Bundle 'rstacruz/sparkup.git', {'rtp': 'vim/'} + +" Camel case +Bundle 'vim-scripts/RubySinatra' + +" syntax issue #203 +Bundle 'jimenezrick/vimerl' + +filetype plugin indent on " Automatically detect file types. + +set wildignore+=doc " should not break helptags +set wildignore+=.git " should not break clone +set wildignore+=.git/* " should not break clone +set wildignore+=*/.git/* +" TODO: helptags fails with this +" set wildignore+=doc/* " should not break clone +" set wildignore+=*/doc/* + +au VimEnter * BundleInstall + +" e test/files/erlang.erl