add rust completion and update plug

This commit is contained in:
Felix Van der Jeugt 2016-03-25 09:52:33 +01:00
parent 522c8b0bbd
commit b9e2846b8e
2 changed files with 104 additions and 44 deletions

View File

@ -11,9 +11,13 @@
" call plug#begin('~/.vim/plugged') " call plug#begin('~/.vim/plugged')
" "
" " Make sure you use single quotes " " 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' " 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 " " Group dependencies, vim-snippets depends on ultisnips
" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' " Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'
" "
@ -21,9 +25,6 @@
" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } " Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" "
" " Using git URL
" Plug 'https://github.com/junegunn/vim-github-dashboard.git'
"
" " Using a non-master branch " " Using a non-master branch
" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } " Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
" "
@ -40,7 +41,21 @@
" call plug#end() " call plug#end()
" "
" Then reload .vimrc and :PlugInstall to install plugins. " 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 `<Plug>`-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 " Copyright (c) 2015 Junegunn Choi
@ -113,9 +128,9 @@ function! plug#begin(...)
endfunction endfunction
function! s:define_commands() function! s:define_commands()
command! -nargs=+ -bar Plug call s:add(<args>) command! -nargs=+ -bar Plug call s:Plug(<args>)
if !executable('git') 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 endif
command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>]) command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(<bang>0, [<f-args>])
command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>]) command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(<bang>0, [<f-args>])
@ -134,12 +149,19 @@ function! s:to_s(v)
return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n"
endfunction endfunction
function! s:glob(from, pattern)
return s:lines(globpath(a:from, a:pattern))
endfunction
function! s:source(from, ...) function! s:source(from, ...)
let found = 0
for pattern in a:000 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) execute 'source' s:esc(vim)
let found = 1
endfor endfor
endfor endfor
return found
endfunction endfunction
function! s:assoc(dict, key, val) function! s:assoc(dict, key, val)
@ -233,7 +255,9 @@ function! plug#end()
call s:reorg_rtp() call s:reorg_rtp()
filetype plugin indent on filetype plugin indent on
if has('vim_starting') if has('vim_starting')
if has('syntax') && !exists('g:syntax_on')
syntax enable syntax enable
end
else else
call s:reload() call s:reload()
endif endif
@ -264,8 +288,9 @@ function! s:version_requirement(val, min)
endfunction endfunction
function! s:git_version_requirement(...) function! s:git_version_requirement(...)
let s:git_version = get(s:, 'git_version', if !exists('s:git_version')
\ map(split(split(s:system('git --version'))[-1], '\.'), 'str2nr(v:val)')) 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) return s:version_requirement(s:git_version, a:000)
endfunction endfunction
@ -396,7 +421,7 @@ function! s:remove_triggers(name)
call remove(s:triggers, a:name) call remove(s:triggers, a:name)
endfunction endfunction
function! s:lod(names, types) function! s:lod(names, types, ...)
for name in a:names for name in a:names
call s:remove_triggers(name) call s:remove_triggers(name)
let s:loaded[name] = 1 let s:loaded[name] = 1
@ -408,6 +433,12 @@ function! s:lod(names, types)
for dir in a:types for dir in a:types
call s:source(rtp, dir.'/**/*.vim') call s:source(rtp, dir.'/**/*.vim')
endfor 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) if exists('#User#'.name)
execute 'doautocmd User' name execute 'doautocmd User' name
endif endif
@ -415,7 +446,8 @@ function! s:lod(names, types)
endfunction endfunction
function! s:lod_ft(pat, names) 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 execute 'autocmd! PlugLOD FileType' a:pat
if exists('#filetypeplugin#FileType') if exists('#filetypeplugin#FileType')
doautocmd filetypeplugin FileType doautocmd filetypeplugin FileType
@ -443,16 +475,16 @@ function! s:lod_map(map, names, prefix)
call feedkeys(a:prefix . substitute(a:map, '^<Plug>', "\<Plug>", '') . extra) call feedkeys(a:prefix . substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
endfunction endfunction
function! s:add(repo, ...) function! s:Plug(repo, ...)
if a:0 > 1 if a:0 > 1
return s:err('Invalid number of arguments (1..2)') return s:err('Invalid number of arguments (1..2)')
endif endif
try try
let repo = s:trim(a:repo) let repo = s:trim(a:repo)
let name = fnamemodify(repo, ':t:s?\.git$??') let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec
let spec = extend(s:infer_properties(name, repo), let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??'))
\ a:0 == 1 ? s:parse_options(a:1) : s:base_spec) let spec = extend(s:infer_properties(name, repo), opts)
if !has_key(g:plugs, name) if !has_key(g:plugs, name)
call add(g:plugs_order, name) call add(g:plugs_order, name)
endif endif
@ -535,8 +567,10 @@ function! s:syntax()
syn match plugTag /(tag: [^)]\+)/ syn match plugTag /(tag: [^)]\+)/
syn match plugInstall /\(^+ \)\@<=[^:]*/ syn match plugInstall /\(^+ \)\@<=[^:]*/
syn match plugUpdate /\(^* \)\@<=[^:]*/ syn match plugUpdate /\(^* \)\@<=[^:]*/
syn match plugCommit /^ [0-9a-z]\{7} .*/ contains=plugRelDate,plugSha,plugTag syn match plugCommit /^ \X*[0-9a-z]\{7} .*/ contains=plugRelDate,plugEdge,plugTag
syn match plugSha /\(^ \)\@<=[0-9a-z]\{7}/ contained 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 plugRelDate /([^)]*)$/ contained
syn match plugNotLoaded /(not loaded)$/ syn match plugNotLoaded /(not loaded)$/
syn match plugError /^x.*/ syn match plugError /^x.*/
@ -560,6 +594,7 @@ function! s:syntax()
hi def link plugError Error hi def link plugError Error
hi def link plugRelDate Comment hi def link plugRelDate Comment
hi def link plugEdge PreProc
hi def link plugSha Identifier hi def link plugSha Identifier
hi def link plugTag Constant hi def link plugTag Constant
@ -620,13 +655,7 @@ function! s:switch_out(...)
endif endif
endfunction endfunction
function! s:prepare() function! s:finish_bindings()
call s:job_abort()
if s:switch_in()
silent %d _
else
call s:new_window()
nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr>
nnoremap <silent> <buffer> R :silent! call <SID>retry()<cr> nnoremap <silent> <buffer> R :silent! call <SID>retry()<cr>
nnoremap <silent> <buffer> D :PlugDiff<cr> nnoremap <silent> <buffer> D :PlugDiff<cr>
nnoremap <silent> <buffer> S :PlugStatus<cr> nnoremap <silent> <buffer> S :PlugStatus<cr>
@ -634,18 +663,37 @@ function! s:prepare()
xnoremap <silent> <buffer> U :call <SID>status_update()<cr> xnoremap <silent> <buffer> U :call <SID>status_update()<cr>
nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr> nnoremap <silent> <buffer> ]] :silent! call <SID>section('')<cr>
nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr> nnoremap <silent> <buffer> [[ :silent! call <SID>section('b')<cr>
endfunction
function! s:prepare(...)
if empty(getcwd())
throw 'Invalid current working directory. Cannot proceed.'
endif
call s:job_abort()
if s:switch_in()
normal q
endif
call s:new_window()
nnoremap <silent> <buffer> q :if b:plug_preview==1<bar>pc<bar>endif<bar>bd<cr>
if a:0 == 0
call s:finish_bindings()
endif
let b:plug_preview = -1 let b:plug_preview = -1
let s:plug_tab = tabpagenr() let s:plug_tab = tabpagenr()
let s:plug_buf = winbufnr(0) let s:plug_buf = winbufnr(0)
call s:assign_name() call s:assign_name()
endif
silent! unmap <buffer> <cr> silent! unmap <buffer> <cr>
silent! unmap <buffer> L silent! unmap <buffer> L
silent! unmap <buffer> o silent! unmap <buffer> o
silent! unmap <buffer> X silent! unmap <buffer> X
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap cursorline modifiable setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap cursorline modifiable
setf vim-plug setf vim-plug
if exists('g:syntax_on')
call s:syntax() call s:syntax()
endif
endfunction endfunction
function! s:assign_name() function! s:assign_name()
@ -755,6 +803,7 @@ function! s:finish(pull)
call add(msgs, "Press 'D' to see the updated changes.") call add(msgs, "Press 'D' to see the updated changes.")
endif endif
echo join(msgs, ' ') echo join(msgs, ' ')
call s:finish_bindings()
endfunction endfunction
function! s:retry() function! s:retry()
@ -829,7 +878,7 @@ function! s:update_impl(pull, force, args) abort
\ 'fin': 0 \ 'fin': 0
\ } \ }
call s:prepare() call s:prepare(1)
call append(0, ['', '']) call append(0, ['', ''])
normal! 2G normal! 2G
silent! redraw silent! redraw
@ -840,7 +889,7 @@ function! s:update_impl(pull, force, args) abort
" Python version requirement (>= 2.7) " Python version requirement (>= 2.7)
if python && !has('python3') && !ruby && !s:nvim && s:update.threads > 1 if python && !has('python3') && !ruby && !s:nvim && s:update.threads > 1
redir => pyv redir => pyv
silent python import platform; print(platform.python_version()) silent python import platform; print platform.python_version()
redir END redir END
let python = s:version_requirement( let python = s:version_requirement(
\ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6])
@ -1697,7 +1746,7 @@ function! s:shellesc(arg)
endfunction endfunction
function! s:glob_dir(path) 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 endfunction
function! s:progress_bar(line, bar, total) function! s:progress_bar(line, bar, total)
@ -1974,7 +2023,7 @@ function! s:preview_commit()
let b:plug_preview = !s:is_preview_window_open() let b:plug_preview = !s:is_preview_window_open()
endif endif
let sha = matchstr(getline('.'), '\(^ \)\@<=[0-9a-z]\{7}') let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-z]\{7}')
if empty(sha) if empty(sha)
return return
endif endif
@ -1999,10 +2048,15 @@ function! s:section(flags)
endfunction endfunction
function! s:format_git_log(line) 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 = matchstr(refs, 'tag: [^,)]\+')
let tag = empty(tag) ? ' ' : ' ('.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 endfunction
function! s:append_ul(lnum, text) 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)') let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)')
call s:progress_bar(2, bar, len(total)) call s:progress_bar(2, bar, len(total))
for origin in [1, 0] 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:') 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 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) if !empty(diff)
let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' 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)'))) call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)')))

View File

@ -8,6 +8,7 @@ syntax enable
set background=dark set background=dark
colorscheme darkblue colorscheme darkblue
set mouse=n " fuck you, mouse
set number " line numbers on the right side set number " line numbers on the right side
set showcmd " show the commands while typing set showcmd " show the commands while typing
set splitright " open new splits on the right set splitright " open new splits on the right
@ -110,6 +111,7 @@ map N <Plug>(easymotion-prev)
set nohlsearch set nohlsearch
let g:ycm_global_ycm_extra_conf='~/.config/nvim/ycm_extra_conf.py' 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 set completeopt=menu
let base16colorspace=256 let base16colorspace=256