···2828" " Using a non-master branch
2929" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' }
3030"
3131+" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
3232+" Plug 'fatih/vim-go', { 'tag': '*' }
3333+"
3134" " Plugin options
3235" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }
3336"
···128131endfunction
129132130133function! s:define_commands()
131131- command! -nargs=+ -bar Plug call s:Plug(<args>)
134134+ command! -nargs=+ -bar Plug call plug#(<args>)
132135 if !executable('git')
133136 return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.')
134137 endif
···222225 if has_key(plug, 'for')
223226 let types = s:to_a(plug.for)
224227 if !empty(types)
228228+ augroup filetypedetect
225229 call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim')
230230+ augroup END
226231 endif
227232 for type in types
228233 call s:assoc(lod.ft, type, name)
···392397endfunction
393398394399function! s:doautocmd(...)
395395- execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
400400+ if exists('#'.join(a:000, '#'))
401401+ execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '<nomodeline>' : '') join(a:000)
402402+ endif
396403endfunction
397404398405function! plug#load(...)
···410417 for name in a:000
411418 call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
412419 endfor
413413- if exists('#BufRead')
414414- doautocmd BufRead
415415- endif
420420+ call s:doautocmd('BufRead')
416421 return 1
417422endfunction
418423···448453 endif
449454 call s:source(rtp, a:2)
450455 endif
451451- if exists('#User#'.name)
452452- call s:doautocmd('User', name)
453453- endif
456456+ call s:doautocmd('User', name)
454457 endfor
455458endfunction
456459···458461 let syn = 'syntax/'.a:pat.'.vim'
459462 call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn)
460463 execute 'autocmd! PlugLOD FileType' a:pat
461461- if exists('#filetypeplugin#FileType')
462462- doautocmd filetypeplugin FileType
463463- endif
464464- if exists('#filetypeindent#FileType')
465465- doautocmd filetypeindent FileType
466466- endif
464464+ call s:doautocmd('filetypeplugin', 'FileType')
465465+ call s:doautocmd('filetypeindent', 'FileType')
467466endfunction
468467469468function! s:lod_cmd(cmd, bang, l1, l2, args, names)
470469 call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
470470+ call s:doautocmd('BufRead')
471471 execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args)
472472endfunction
473473474474function! s:lod_map(map, names, prefix)
475475 call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin'])
476476+ call s:doautocmd('BufRead')
476477 let extra = ''
477478 while 1
478479 let c = getchar(0)
···484485 call feedkeys(a:prefix . substitute(a:map, '^<Plug>', "\<Plug>", '') . extra)
485486endfunction
486487487487-function! s:Plug(repo, ...)
488488+function! plug#(repo, ...)
488489 if a:0 > 1
489490 return s:err('Invalid number of arguments (1..2)')
490491 endif
···717718 silent! execute 'f' fnameescape(name)
718719endfunction
719720721721+function! s:chsh(swap)
722722+ let prev = [&shell, &shellredir]
723723+ if !s:is_win && a:swap
724724+ set shell=sh shellredir=>%s\ 2>&1
725725+ endif
726726+ return prev
727727+endfunction
728728+720729function! s:bang(cmd, ...)
721730 try
731731+ let [sh, shrd] = s:chsh(a:0)
722732 " FIXME: Escaping is incomplete. We could use shellescape with eval,
723733 " but it won't work on Windows.
724724- let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
734734+ let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd
725735 let g:_plug_bang = '!'.escape(cmd, '#!%')
726736 execute "normal! :execute g:_plug_bang\<cr>\<cr>"
727737 finally
728738 unlet g:_plug_bang
739739+ let [&shell, &shellredir] = [sh, shrd]
729740 endtry
730741 return v:shell_error ? 'Exit status: ' . v:shell_error : ''
731742endfunction
···831842endfunction
832843833844function! s:check_ruby()
834834- silent! ruby require 'thread'; VIM::command('let g:plug_ruby = 1')
835835- if get(g:, 'plug_ruby', 0)
836836- unlet g:plug_ruby
837837- return 1
845845+ silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'")
846846+ if !exists('g:plug_ruby')
847847+ redraw!
848848+ return s:warn('echom', 'Warning: Ruby interface is broken')
838849 endif
839839- redraw!
840840- return s:warn('echom', 'Warning: Ruby interface is broken')
850850+ let ruby_version = split(g:plug_ruby, '\.')
851851+ unlet g:plug_ruby
852852+ return s:version_requirement(ruby_version, [1, 8, 7])
841853endfunction
842854843855function! s:update_impl(pull, force, args) abort
···964976 call s:log4(name, 'Checking out '.spec.commit)
965977 let out = s:checkout(spec)
966978 elseif has_key(spec, 'tag')
967967- call s:log4(name, 'Checking out '.spec.tag)
968968- let out = s:system('git checkout -q '.s:esc(spec.tag).' 2>&1', spec.dir)
979979+ let tag = spec.tag
980980+ if tag =~ '\*'
981981+ let tags = s:lines(s:system('git tag --list '.string(tag).' --sort -version:refname 2>&1', spec.dir))
982982+ if !v:shell_error && !empty(tags)
983983+ let tag = tags[0]
984984+ call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag))
985985+ call append(3, '')
986986+ endif
987987+ endif
988988+ call s:log4(name, 'Checking out '.tag)
989989+ let out = s:system('git checkout -q '.s:esc(tag).' 2>&1', spec.dir)
969990 else
970991 let branch = s:esc(get(spec, 'branch', 'master'))
971992 call s:log4(name, 'Merging origin/'.branch)
···977998 call s:log4(name, 'Updating submodules. This may take a while.')
978999 let out .= s:bang('git submodule update --init --recursive 2>&1', spec.dir)
9791000 endif
980980- let msg = printf('%s %s: %s', v:shell_error ? 'x': '-', name, get(s:lines(out), -1, ''))
10011001+ let msg = printf('%s %s: %s', v:shell_error ? 'x': '-', name, s:lastline(out))
9811002 if v:shell_error
9821003 call add(s:update.errors, name)
9831004 call s:regress_bar()
···1145116611461167 let has_tag = has_key(spec, 'tag')
11471168 if !new
11481148- let error = s:git_validate(spec, 0)
11691169+ let [error, _] = s:git_validate(spec, 0)
11491170 if empty(error)
11501171 if pull
11511172 let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : ''
···1809183018101831function! s:system(cmd, ...)
18111832 try
18121812- let [sh, shrd] = [&shell, &shellredir]
18131813- if !s:is_win
18141814- set shell=sh shellredir=>%s\ 2>&1
18151815- endif
18331833+ let [sh, shrd] = s:chsh(1)
18161834 let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd
18171835 return system(s:is_win ? '('.cmd.')' : cmd)
18181836 finally
···18601878 let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.',
18611879 \ branch, a:spec.branch)
18621880 endif
18811881+ if empty(err)
18821882+ let commits = len(s:lines(s:system(printf('git rev-list origin/%s..HEAD', a:spec.branch), a:spec.dir)))
18831883+ if !v:shell_error && commits
18841884+ let err = join([printf('Diverged from origin/%s by %d commit(s).', a:spec.branch, commits),
18851885+ \ 'Reinstall after PlugClean.'], "\n")
18861886+ endif
18871887+ endif
18631888 endif
18641889 else
18651890 let err = 'Not found'
18661891 endif
18671867- return err
18921892+ return [err, err =~# 'PlugClean']
18681893endfunction
1869189418701895function! s:rm_rf(dir)
···1875190018761901function! s:clean(force)
18771902 call s:prepare()
18781878- call append(0, 'Searching for unused plugins in '.g:plug_home)
19031903+ call append(0, 'Searching for invalid plugins in '.g:plug_home)
18791904 call append(1, '')
1880190518811906 " List of valid directories
18821907 let dirs = []
19081908+ let errs = {}
18831909 let [cnt, total] = [0, len(g:plugs)]
18841910 for [name, spec] in items(g:plugs)
18851885- if !s:is_managed(name) || empty(s:git_validate(spec, 0))
19111911+ if !s:is_managed(name)
18861912 call add(dirs, spec.dir)
19131913+ else
19141914+ let [err, clean] = s:git_validate(spec, 1)
19151915+ if clean
19161916+ let errs[spec.dir] = s:lines(err)[0]
19171917+ else
19181918+ call add(dirs, spec.dir)
19191919+ endif
18871920 endif
18881921 let cnt += 1
18891922 call s:progress_bar(2, repeat('=', cnt), total)
···19071940 if !has_key(allowed, f) && isdirectory(f)
19081941 call add(todo, f)
19091942 call append(line('$'), '- ' . f)
19431943+ if has_key(errs, f)
19441944+ call append(line('$'), ' ' . errs[f])
19451945+ endif
19101946 let found = filter(found, 'stridx(v:val, f) != 0')
19111947 end
19121948 endwhile
1913194919141914- normal! G
19501950+ 4
19151951 redraw
19161952 if empty(todo)
19171953 call append(line('$'), 'Already clean.')
···19201956 for dir in todo
19211957 call s:rm_rf(dir)
19221958 endfor
19231923- call append(line('$'), 'Removed.')
19591959+ call append(3, ['Removed.', ''])
19241960 else
19251925- call append(line('$'), 'Cancelled.')
19611961+ call append(3, ['Cancelled.', ''])
19261962 endif
19271963 endif
19281928- normal! G
19641964+ 4
19291965endfunction
1930196619311967function! s:upgrade()
···19722008 for [name, spec] in items(g:plugs)
19732009 if has_key(spec, 'uri')
19742010 if isdirectory(spec.dir)
19751975- let err = s:git_validate(spec, 1)
20112011+ let [err, _] = s:git_validate(spec, 1)
19762012 let [valid, msg] = [empty(err), empty(err) ? 'OK' : err]
19772013 else
19782014 let [valid, msg] = [0, 'Not found. Try PlugInstall.']
···2207224322082244let &cpo = s:cpo_save
22092245unlet s:cpo_save
22102210-
+20-10
nvim/init.vim
···1313Plug 'sheerun/vim-polyglot'
1414Plug 'dag/vim-fish'
1515Plug 'hauleth/vim-ketos'
1616+Plug 'slashmili/alchemist.vim'
16171718" Git
1819Plug 'mhinz/vim-signify'
···73747475" Display tabs and trailing spaces visually
7576set list
7676-set listchars=tab:→\ ,trail:·
7777+set listchars=tab:→\ ,trail:·,nbsp:␣
77787879" Show current mode down the bottom
7980set noshowmode
···111112set splitbelow
112113113114set lazyredraw
115115+116116+set timeoutlen=500
114117" }}}
115118" Identation {{{
116119set shiftwidth=2
···172175" Leader {{{
173176let mapleader = "\<space>"
174177" }}}
178178+" Store relative line number jumps in the jumplist {{{
179179+" Treat long lines as break lines (useful when moving around in them).
180180+noremap <expr> j v:count > 1 ? 'm`' . v:count . 'j' : 'gj'
181181+noremap <expr> k v:count > 1 ? 'm`' . v:count . 'k' : 'gk'
182182+" }}}
175183" ESC {{{
176184inoremap jk <ESC>
177185" }}}
···209217nnoremap Q K
210218" }}}
211219" Simplify switching to Command mode {{{
212212-nnoremap ; :
213213-nnoremap : ;
214214-vnoremap ; :
215215-vnoremap : ;
220220+noremap ; :
221221+noremap : ;
222222+noremap q; q:
216223" }}}
217224" Fast paste from system clipboard {{{
218225inoremap <C-R><C-R> <C-R>*
···241248" }}}
242249" Search {{{
243250" Easier change and replace word
244244-noremap c* *``cgn
245245-noremap c# #``cgN
246246-noremap cg* g*``cgn
247247-noremap cg# g#``cgN
251251+nnoremap c. *Ncgn
252252+253253+noremap <leader>, :nohlsearch<CR>
248254249255" Search for selection
250256vnoremap // y/<C-r>"<CR>
···252258" Git {{{
253259nnoremap U <nop>
254260nnoremap Us :<C-u>Gstatus<CR>
261261+nnoremap Up :<C-u>Git push<CR>
255262nnoremap Ud :<C-u>Gdiff<CR>
256263nnoremap UB :<C-u>Gblame<CR>
257264nnoremap Ub :<C-u>Promiscuous<CR>
···267274" Tabs {{{
268275nnoremap <C-w>t :<C-u>tabnew <bar> Dirvish<CR>
269276" }}}
277277+" Yank to the end of line {{{
278278+nnoremap Y y$
279279+" }}}
270280" }}}
271281" Configuration {{{
272282" Grep {{{
···291301" Neomake {{{
292302augroup syntax_check
293303 au!
294294- autocmd BufWritePost * silent Neomake
304304+ autocmd BufEnter,BufWritePost * silent Neomake
295305augroup END
296306297307let g:neomake_warning_sign = {
-7
nvim/plugin/numbers.vim
···11-" Line numbers are good
22-augroup numbers
33- au BufEnter,WinEnter * set number
44- au BufEnter,WinEnter * set relativenumber
55- au BufLeave,WinLeave * set nonumber
66- au BufLeave,WinLeave * set norelativenumber
77-augroup END