diff --git a/config/nvim/autoload/plug.vim b/config/nvim/autoload/plug.vim index 2a06dc7..9cb02f7 100644 --- a/config/nvim/autoload/plug.vim +++ b/config/nvim/autoload/plug.vim @@ -11,9 +11,13 @@ " call plug#begin('~/.vim/plugged') " " " Make sure you use single quotes -" Plug 'junegunn/seoul256.vim' +" +" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align " Plug 'junegunn/vim-easy-align' " +" " Any valid git URL is allowed +" Plug 'https://github.com/junegunn/vim-github-dashboard.git' +" " " Group dependencies, vim-snippets depends on ultisnips " Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " @@ -21,9 +25,6 @@ " Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " -" " Using git URL -" Plug 'https://github.com/junegunn/vim-github-dashboard.git' -" " " Using a non-master branch " Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } " @@ -40,7 +41,21 @@ " call plug#end() " " Then reload .vimrc and :PlugInstall to install plugins. -" Visit https://github.com/junegunn/vim-plug for more information. +" +" Plug options: +" +"| Option | Description | +"| ----------------------- | ------------------------------------------------ | +"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | +"| `rtp` | Subdirectory that contains Vim plugin | +"| `dir` | Custom directory for the plugin | +"| `as` | Use different name for the plugin | +"| `do` | Post-update hook (string or funcref) | +"| `on` | On-demand loading: Commands or ``-mappings | +"| `for` | On-demand loading: File types | +"| `frozen` | Do not update unless explicitly specified | +" +" More information: https://github.com/junegunn/vim-plug " " " Copyright (c) 2015 Junegunn Choi @@ -113,9 +128,9 @@ function! plug#begin(...) endfunction function! s:define_commands() - command! -nargs=+ -bar Plug call s:add() + command! -nargs=+ -bar Plug call s:Plug() if !executable('git') - return s:err('`git` executable not found. vim-plug requires git.') + return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') endif command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(0, []) command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(0, []) @@ -134,12 +149,19 @@ function! s:to_s(v) return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" endfunction +function! s:glob(from, pattern) + return s:lines(globpath(a:from, a:pattern)) +endfunction + function! s:source(from, ...) + let found = 0 for pattern in a:000 - for vim in s:lines(globpath(a:from, pattern)) + for vim in s:glob(a:from, pattern) execute 'source' s:esc(vim) + let found = 1 endfor endfor + return found endfunction function! s:assoc(dict, key, val) @@ -233,7 +255,9 @@ function! plug#end() call s:reorg_rtp() filetype plugin indent on if has('vim_starting') - syntax enable + if has('syntax') && !exists('g:syntax_on') + syntax enable + end else call s:reload() endif @@ -264,8 +288,9 @@ function! s:version_requirement(val, min) endfunction function! s:git_version_requirement(...) - let s:git_version = get(s:, 'git_version', - \ map(split(split(s:system('git --version'))[-1], '\.'), 'str2nr(v:val)')) + if !exists('s:git_version') + let s:git_version = map(split(split(s:system('git --version'))[-1], '\.'), 'str2nr(v:val)') + endif return s:version_requirement(s:git_version, a:000) endfunction @@ -396,7 +421,7 @@ function! s:remove_triggers(name) call remove(s:triggers, a:name) endfunction -function! s:lod(names, types) +function! s:lod(names, types, ...) for name in a:names call s:remove_triggers(name) let s:loaded[name] = 1 @@ -408,6 +433,12 @@ function! s:lod(names, types) for dir in a:types call s:source(rtp, dir.'/**/*.vim') endfor + if a:0 + if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) + execute 'runtime' a:1 + endif + call s:source(rtp, a:2) + endif if exists('#User#'.name) execute 'doautocmd User' name endif @@ -415,7 +446,8 @@ function! s:lod(names, types) endfunction function! s:lod_ft(pat, names) - call s:lod(a:names, ['plugin', 'after/plugin', 'syntax', 'after/syntax']) + let syn = 'syntax/'.a:pat.'.vim' + call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) execute 'autocmd! PlugLOD FileType' a:pat if exists('#filetypeplugin#FileType') doautocmd filetypeplugin FileType @@ -443,16 +475,16 @@ function! s:lod_map(map, names, prefix) call feedkeys(a:prefix . substitute(a:map, '^', "\", '') . extra) endfunction -function! s:add(repo, ...) +function! s:Plug(repo, ...) if a:0 > 1 return s:err('Invalid number of arguments (1..2)') endif try let repo = s:trim(a:repo) - let name = fnamemodify(repo, ':t:s?\.git$??') - let spec = extend(s:infer_properties(name, repo), - \ a:0 == 1 ? s:parse_options(a:1) : s:base_spec) + let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec + let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??')) + let spec = extend(s:infer_properties(name, repo), opts) if !has_key(g:plugs, name) call add(g:plugs_order, name) endif @@ -535,8 +567,10 @@ function! s:syntax() syn match plugTag /(tag: [^)]\+)/ syn match plugInstall /\(^+ \)\@<=[^:]*/ syn match plugUpdate /\(^* \)\@<=[^:]*/ - syn match plugCommit /^ [0-9a-z]\{7} .*/ contains=plugRelDate,plugSha,plugTag - syn match plugSha /\(^ \)\@<=[0-9a-z]\{7}/ contained + syn match plugCommit /^ \X*[0-9a-z]\{7} .*/ contains=plugRelDate,plugEdge,plugTag + syn match plugEdge /^ \X\+$/ + syn match plugEdge /^ \X*/ contained nextgroup=plugSha + syn match plugSha /[0-9a-z]\{7}/ contained syn match plugRelDate /([^)]*)$/ contained syn match plugNotLoaded /(not loaded)$/ syn match plugError /^x.*/ @@ -560,6 +594,7 @@ function! s:syntax() hi def link plugError Error hi def link plugRelDate Comment + hi def link plugEdge PreProc hi def link plugSha Identifier hi def link plugTag Constant @@ -620,32 +655,45 @@ function! s:switch_out(...) endif endfunction -function! s:prepare() +function! s:finish_bindings() + nnoremap R :silent! call retry() + nnoremap D :PlugDiff + nnoremap S :PlugStatus + nnoremap U :call status_update() + xnoremap U :call status_update() + nnoremap ]] :silent! call section('') + nnoremap [[ :silent! call section('b') +endfunction + +function! s:prepare(...) + if empty(getcwd()) + throw 'Invalid current working directory. Cannot proceed.' + endif + call s:job_abort() if s:switch_in() - silent %d _ - else - call s:new_window() - nnoremap q :if b:plug_preview==1pcendifbd - nnoremap R :silent! call retry() - nnoremap D :PlugDiff - nnoremap S :PlugStatus - nnoremap U :call status_update() - xnoremap U :call status_update() - nnoremap ]] :silent! call section('') - nnoremap [[ :silent! call section('b') - let b:plug_preview = -1 - let s:plug_tab = tabpagenr() - let s:plug_buf = winbufnr(0) - call s:assign_name() + normal q endif + + call s:new_window() + nnoremap q :if b:plug_preview==1pcendifbd + if a:0 == 0 + call s:finish_bindings() + endif + let b:plug_preview = -1 + let s:plug_tab = tabpagenr() + let s:plug_buf = winbufnr(0) + call s:assign_name() + silent! unmap silent! unmap L silent! unmap o silent! unmap X setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap cursorline modifiable setf vim-plug - call s:syntax() + if exists('g:syntax_on') + call s:syntax() + endif endfunction function! s:assign_name() @@ -755,6 +803,7 @@ function! s:finish(pull) call add(msgs, "Press 'D' to see the updated changes.") endif echo join(msgs, ' ') + call s:finish_bindings() endfunction function! s:retry() @@ -829,7 +878,7 @@ function! s:update_impl(pull, force, args) abort \ 'fin': 0 \ } - call s:prepare() + call s:prepare(1) call append(0, ['', '']) normal! 2G silent! redraw @@ -840,7 +889,7 @@ function! s:update_impl(pull, force, args) abort " Python version requirement (>= 2.7) if python && !has('python3') && !ruby && !s:nvim && s:update.threads > 1 redir => pyv - silent python import platform; print(platform.python_version()) + silent python import platform; print platform.python_version() redir END let python = s:version_requirement( \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) @@ -1697,7 +1746,7 @@ function! s:shellesc(arg) endfunction function! s:glob_dir(path) - return map(filter(s:lines(globpath(a:path, '**')), 'isdirectory(v:val)'), 's:dirpath(v:val)') + return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') endfunction function! s:progress_bar(line, bar, total) @@ -1974,7 +2023,7 @@ function! s:preview_commit() let b:plug_preview = !s:is_preview_window_open() endif - let sha = matchstr(getline('.'), '\(^ \)\@<=[0-9a-z]\{7}') + let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-z]\{7}') if empty(sha) return endif @@ -1999,10 +2048,15 @@ function! s:section(flags) endfunction function! s:format_git_log(line) - let [sha, refs, subject, date] = split(a:line, nr2char(1)) + let indent = ' ' + let tokens = split(a:line, nr2char(1)) + if len(tokens) != 5 + return indent.substitute(a:line, '\s*$', '', '') + endif + let [graph, sha, refs, subject, date] = tokens let tag = matchstr(refs, 'tag: [^,)]\+') let tag = empty(tag) ? ' ' : ' ('.tag.') ' - return printf(' %s%s%s (%s)', sha, tag, subject, date) + return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) endfunction function! s:append_ul(lnum, text) @@ -2017,10 +2071,14 @@ function! s:diff() let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') call s:progress_bar(2, bar, len(total)) for origin in [1, 0] + let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + if empty(plugs) + continue + endif call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') - for [k, v] in reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) + for [k, v] in plugs let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' - let diff = s:system_chomp('git log --pretty=format:"%h%x01%d%x01%s%x01%cr" '.s:shellesc(range), v.dir) + let diff = s:system_chomp('git log --graph --color=never --pretty=format:"%x01%h%x01%d%x01%s%x01%cr" '.s:shellesc(range), v.dir) if !empty(diff) let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) diff --git a/config/nvim/init.vim b/config/nvim/init.vim index 64d05e5..aa58f91 100644 --- a/config/nvim/init.vim +++ b/config/nvim/init.vim @@ -8,6 +8,7 @@ syntax enable set background=dark colorscheme darkblue +set mouse=n " fuck you, mouse set number " line numbers on the right side set showcmd " show the commands while typing set splitright " open new splits on the right @@ -110,6 +111,7 @@ map N (easymotion-prev) set nohlsearch let g:ycm_global_ycm_extra_conf='~/.config/nvim/ycm_extra_conf.py' +let g:ycm_rust_src_path='/data/programming/rustc-1.7.0/src' set completeopt=menu let base16colorspace=256