diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-11-28 10:10:17 +0100 |
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2025-11-28 10:10:17 +0100 |
| commit | 73d39012c99054caf153ccf3c339247a06a531f7 (patch) | |
| tree | b036fd4c43433901e592bd17d6f6c13bfba9640c | |
| parent | 28b91cf5ed607a26516256ba312a786c6f7629db (diff) | |
| download | vimrc-73d39012c99054caf153ccf3c339247a06a531f7.tar.gz vimrc-73d39012c99054caf153ccf3c339247a06a531f7.tar.bz2 vimrc-73d39012c99054caf153ccf3c339247a06a531f7.zip | |
| -rw-r--r-- | autoload/plug.vim | 293 | ||||
| -rw-r--r-- | dotvimrc | 81 |
2 files changed, 226 insertions, 148 deletions
diff --git a/autoload/plug.vim b/autoload/plug.vim index 652caa8..f479fba 100644 --- a/autoload/plug.vim +++ b/autoload/plug.vim @@ -1,67 +1,36 @@ " vim-plug: Vim plugin manager " ============================ " -" Download plug.vim and put it in ~/.vim/autoload +" 1. Download plug.vim and put it in 'autoload' directory " +" # Vim " curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ " https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim " -" Edit your .vimrc +" # Neovim +" sh -c 'curl -fLo "${XDG_DATA_HOME:-$HOME/.local/share}"/nvim/site/autoload/plug.vim --create-dirs \ +" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' " -" call plug#begin('~/.vim/plugged') +" 2. Add a vim-plug section to your ~/.vimrc (or ~/.config/nvim/init.vim for Neovim) " -" " Make sure you use single quotes +" call plug#begin() " -" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align -" Plug 'junegunn/vim-easy-align' +" " List your plugins here +" Plug 'tpope/vim-sensible' " -" " Any valid git URL is allowed -" Plug 'https://github.com/junegunn/vim-github-dashboard.git' -" -" " Multiple Plug commands can be written in a single line using | separators -" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' -" -" " On-demand loading -" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } -" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } -" -" " Using a non-default branch -" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } -" -" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) -" Plug 'fatih/vim-go', { 'tag': '*' } -" -" " Plugin options -" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } -" -" " Plugin outside ~/.vim/plugged with post-update hook -" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } -" -" " Unmanaged plugin (manually installed and updated) -" Plug '~/my-prototype-plugin' -" -" " Initialize plugin system " call plug#end() " -" Then reload .vimrc and :PlugInstall to install plugins. -" -" Plug options: +" 3. Reload the file or restart Vim, then you can, " -"| 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 | +" :PlugInstall to install plugins +" :PlugUpdate to update plugins +" :PlugDiff to review the changes from the last update +" :PlugClean to remove plugins no longer in the list " -" More information: https://github.com/junegunn/vim-plug +" For more information, see https://github.com/junegunn/vim-plug " " -" Copyright (c) 2017 Junegunn Choi +" Copyright (c) 2024 Junegunn Choi " " MIT License " @@ -238,7 +207,6 @@ endfunction function! plug#begin(...) if a:0 > 0 - let s:plug_home_org = a:1 let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) elseif exists('g:plug_home') let home = s:path(g:plug_home) @@ -391,6 +359,9 @@ function! plug#end() if !empty(types) augroup filetypedetect call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') + if has('nvim-0.5.0') + call s:source(s:rtp(plug), 'ftdetect/**/*.lua', 'after/ftdetect/**/*.lua') + endif augroup END endif for type in types @@ -401,8 +372,10 @@ function! plug#end() for [cmd, names] in items(lod.cmd) execute printf( - \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)', - \ cmd, string(cmd), string(names)) + \ has('patch-7.4.1898') + \ ? 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, <q-mods> ,%s)' + \ : 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "<bang>", <line1>, <line2>, <q-args>, %s)' + \ , cmd, string(cmd), string(names)) endfor for [map, names] in items(lod.map) @@ -438,6 +411,9 @@ endfunction function! s:load_plugin(spec) call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') + if has('nvim-0.5.0') + call s:source(s:rtp(a:spec), 'plugin/**/*.lua', 'after/plugin/**/*.lua') + endif endfunction function! s:reload_plugins() @@ -655,6 +631,9 @@ function! s:lod(names, types, ...) let rtp = s:rtp(g:plugs[name]) for dir in a:types call s:source(rtp, dir.'/**/*.vim') + if has('nvim-0.5.0') " see neovim#14686 + call s:source(rtp, dir.'/**/*.lua') + endif endfor if a:0 if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) @@ -674,11 +653,19 @@ function! s:lod_ft(pat, names) call s:doautocmd('filetypeindent', 'FileType') endfunction -function! s:lod_cmd(cmd, bang, l1, l2, args, names) - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - call s:dobufread(a:names) - execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) -endfunction +if has('patch-7.4.1898') + function! s:lod_cmd(cmd, bang, l1, l2, args, mods, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s %s%s%s %s', a:mods, (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) + endfunction +else + function! s:lod_cmd(cmd, bang, l1, l2, args, names) + call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) + call s:dobufread(a:names) + execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) + endfunction +endif function! s:lod_map(map, names, with_prefix, prefix) call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) @@ -806,10 +793,11 @@ endfunction function! s:syntax() syntax clear syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber - syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX + syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX,plugAbort syn match plugNumber /[0-9]\+[0-9.]*/ contained syn match plugBracket /[[\]]/ contained syn match plugX /x/ contained + syn match plugAbort /\~/ contained syn match plugDash /^-\{1}\ / syn match plugPlus /^+/ syn match plugStar /^*/ @@ -834,6 +822,7 @@ function! s:syntax() hi def link plug2 Repeat hi def link plugH2 Type hi def link plugX Exception + hi def link plugAbort Ignore hi def link plugBracket Structure hi def link plugNumber Number @@ -869,7 +858,7 @@ function! s:lastline(msg) endfunction function! s:new_window() - execute get(g:, 'plug_window', 'vertical topleft new') + execute get(g:, 'plug_window', '-tabnew') endfunction function! s:plug_window_exists() @@ -931,7 +920,7 @@ function! s:prepare(...) endif endfor - call s:job_abort() + call s:job_abort(0) if s:switch_in() if b:plug_preview == 1 pc @@ -967,6 +956,8 @@ function! s:close_pane() if b:plug_preview == 1 pc let b:plug_preview = -1 + elseif exists('s:jobs') && !empty(s:jobs) + call s:job_abort(1) else bd endif @@ -1031,6 +1022,11 @@ function! s:is_updated(dir) endfunction function! s:do(pull, force, todo) + if has('nvim') + " Reset &rtp to invalidate Neovim cache of loaded Lua modules + " See https://github.com/junegunn/vim-plug/pull/1157#issuecomment-1809226110 + let &rtp = &rtp + endif for [name, spec] in items(a:todo) if !isdirectory(spec.dir) continue @@ -1089,15 +1085,21 @@ function! s:hash_match(a, b) return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 endfunction +function! s:disable_credential_helper() + return s:git_version_requirement(2) && get(g:, 'plug_disable_credential_helper', 1) +endfunction + function! s:checkout(spec) let sha = a:spec.commit let output = s:git_revision(a:spec.dir) + let error = 0 if !empty(output) && !s:hash_match(sha, s:lines(output)[0]) - let credential_helper = s:git_version_requirement(2) ? '-c credential.helper= ' : '' + let credential_helper = s:disable_credential_helper() ? '-c credential.helper= ' : '' let output = s:system( \ 'git '.credential_helper.'fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) + let error = v:shell_error endif - return output + return [output, error] endfunction function! s:finish(pull) @@ -1158,7 +1160,7 @@ function! s:update_impl(pull, force, args) abort let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? \ remove(args, -1) : get(g:, 'plug_threads', 16) - let managed = filter(copy(g:plugs), 's:is_managed(v:key)') + let managed = filter(deepcopy(g:plugs), 's:is_managed(v:key)') let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : \ filter(managed, 'index(args, v:key) >= 0') @@ -1292,9 +1294,11 @@ function! s:update_finish() if !pos continue endif + let out = '' + let error = 0 if has_key(spec, 'commit') call s:log4(name, 'Checking out '.spec.commit) - let out = s:checkout(spec) + let [out, error] = s:checkout(spec) elseif has_key(spec, 'tag') let tag = spec.tag if tag =~ '\*' @@ -1307,19 +1311,16 @@ function! s:update_finish() endif call s:log4(name, 'Checking out '.tag) let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) - else - let branch = s:git_origin_branch(spec) - call s:log4(name, 'Merging origin/'.s:esc(branch)) - let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' - \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) + let error = v:shell_error endif - if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && + if !error && filereadable(spec.dir.'/.gitmodules') && \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) call s:log4(name, 'Updating submodules. This may take a while.') let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) + let error = v:shell_error endif let msg = s:format_message(v:shell_error ? 'x': '-', name, out) - if v:shell_error + if error call add(s:update.errors, name) call s:regress_bar() silent execute pos 'd _' @@ -1343,7 +1344,12 @@ function! s:update_finish() endif endfunction -function! s:job_abort() +function! s:mark_aborted(name, message) + let attrs = { 'running': 0, 'error': 1, 'abort': 1, 'lines': [a:message] } + let s:jobs[a:name] = extend(get(s:jobs, a:name, {}), attrs) +endfunction + +function! s:job_abort(cancel) if (!s:nvim && !s:vim8) || !exists('s:jobs') return endif @@ -1357,8 +1363,18 @@ function! s:job_abort() if j.new call s:rm_rf(g:plugs[name].dir) endif + if a:cancel + call s:mark_aborted(name, 'Aborted') + endif endfor - let s:jobs = {} + + if a:cancel + for todo in values(s:update.todo) + let todo.abort = 1 + endfor + else + let s:jobs = {} + endif endfunction function! s:last_non_empty_line(lines) @@ -1372,6 +1388,16 @@ function! s:last_non_empty_line(lines) return '' endfunction +function! s:bullet_for(job, ...) + if a:job.running + return a:job.new ? '+' : '*' + endif + if get(a:job, 'abort', 0) + return '~' + endif + return a:job.error ? 'x' : get(a:000, 0, '-') +endfunction + function! s:job_out_cb(self, data) abort let self = a:self let data = remove(self.lines, -1) . a:data @@ -1380,9 +1406,10 @@ function! s:job_out_cb(self, data) abort " To reduce the number of buffer updates let self.tick = get(self, 'tick', -1) + 1 if !self.running || self.tick % len(s:jobs) == 0 - let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) - call s:log(bullet, self.name, result) + if len(result) + call s:log(s:bullet_for(self), self.name, result) + endif endif endfunction @@ -1395,7 +1422,7 @@ endfunction function! s:job_cb(fn, job, ch, data) if !s:plug_window_exists() " plug window closed - return s:job_abort() + return s:job_abort(0) endif call call(a:fn, [a:job, a:data]) endfunction @@ -1406,16 +1433,17 @@ function! s:nvim_cb(job_id, data, event) dict abort \ s:job_cb('s:job_exit_cb', self, 0, a:data) endfunction -function! s:spawn(name, cmd, opts) - let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], - \ 'new': get(a:opts, 'new', 0) } +function! s:spawn(name, spec, queue, opts) + let job = { 'name': a:name, 'spec': a:spec, 'running': 1, 'error': 0, 'lines': [''], + \ 'new': get(a:opts, 'new', 0), 'queue': copy(a:queue) } + let Item = remove(job.queue, 0) + let argv = type(Item) == s:TYPE.funcref ? call(Item, [a:spec]) : Item let s:jobs[a:name] = job if s:nvim if has_key(a:opts, 'dir') let job.cwd = a:opts.dir endif - let argv = a:cmd call extend(job, { \ 'on_stdout': function('s:nvim_cb'), \ 'on_stderr': function('s:nvim_cb'), @@ -1431,7 +1459,7 @@ function! s:spawn(name, cmd, opts) \ 'Invalid arguments (or job table is full)'] endif elseif s:vim8 - let cmd = join(map(copy(a:cmd), 'plug#shellescape(v:val, {"script": 0})')) + let cmd = join(map(copy(argv), 'plug#shellescape(v:val, {"script": 0})')) if has_key(a:opts, 'dir') let cmd = s:with_cd(cmd, a:opts.dir, 0) endif @@ -1451,27 +1479,33 @@ function! s:spawn(name, cmd, opts) let job.lines = ['Failed to start job'] endif else - let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [a:cmd, a:opts.dir] : [a:cmd])) + let job.lines = s:lines(call('s:system', has_key(a:opts, 'dir') ? [argv, a:opts.dir] : [argv])) let job.error = v:shell_error != 0 let job.running = 0 endif endfunction function! s:reap(name) - let job = s:jobs[a:name] + let job = remove(s:jobs, a:name) if job.error call add(s:update.errors, a:name) elseif get(job, 'new', 0) let s:update.new[a:name] = 1 endif - let s:update.bar .= job.error ? 'x' : '=' - let bullet = job.error ? 'x' : '-' + let more = len(get(job, 'queue', [])) let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) - call s:log(bullet, a:name, empty(result) ? 'OK' : result) - call s:bar() + if len(result) + call s:log(s:bullet_for(job), a:name, result) + endif - call remove(s:jobs, a:name) + if !job.error && more + let job.spec.queue = job.queue + let s:update.todo[a:name] = job.spec + else + let s:update.bar .= s:bullet_for(job, '=') + call s:bar() + endif endfunction function! s:bar() @@ -1524,6 +1558,16 @@ function! s:update_vim() call s:tick() endfunction +function! s:checkout_command(spec) + let a:spec.branch = s:git_origin_branch(a:spec) + return ['git', 'checkout', '-q', a:spec.branch, '--'] +endfunction + +function! s:merge_command(spec) + let a:spec.branch = s:git_origin_branch(a:spec) + return ['git', 'merge', '--ff-only', 'origin/'.a:spec.branch] +endfunction + function! s:tick() let pull = s:update.pull let prog = s:progress_opt(s:nvim || s:vim8) @@ -1538,24 +1582,39 @@ while 1 " Without TCO, Vim stack is bound to explode let name = keys(s:update.todo)[0] let spec = remove(s:update.todo, name) - let new = empty(globpath(spec.dir, '.git', 1)) + if get(spec, 'abort', 0) + call s:mark_aborted(name, 'Skipped') + call s:reap(name) + continue + endif - call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') - redraw + let queue = get(spec, 'queue', []) + let new = empty(globpath(spec.dir, '.git', 1)) + + if empty(queue) + call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') + redraw + endif let has_tag = has_key(spec, 'tag') - if !new + if len(queue) + call s:spawn(name, spec, queue, { 'dir': spec.dir }) + elseif !new let [error, _] = s:git_validate(spec, 0) if empty(error) if pull - let cmd = s:git_version_requirement(2) ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch'] + let cmd = s:disable_credential_helper() ? ['git', '-c', 'credential.helper=', 'fetch'] : ['git', 'fetch'] if has_tag && !empty(globpath(spec.dir, '.git/shallow')) call extend(cmd, ['--depth', '99999999']) endif if !empty(prog) call add(cmd, prog) endif - call s:spawn(name, cmd, { 'dir': spec.dir }) + let queue = [cmd, split('git remote set-head origin -a')] + if !has_tag && !has_key(spec, 'commit') + call extend(queue, [function('s:checkout_command'), function('s:merge_command')]) + endif + call s:spawn(name, spec, queue, { 'dir': spec.dir }) else let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } endif @@ -1570,7 +1629,7 @@ while 1 " Without TCO, Vim stack is bound to explode if !empty(prog) call add(cmd, prog) endif - call s:spawn(name, extend(cmd, [spec.uri, s:trim(spec.dir)]), { 'new': 1 }) + call s:spawn(name, spec, [extend(cmd, [spec.uri, s:trim(spec.dir)]), function('s:checkout_command'), function('s:merge_command')], { 'new': 1 }) endif if !s:jobs[name].running @@ -2269,7 +2328,10 @@ endfunction function! s:with_cd(cmd, dir, ...) let script = a:0 > 0 ? a:1 : 1 - return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) + let pwsh = s:is_powershell(&shell) + let cd = s:is_win && !pwsh ? 'cd /d' : 'cd' + let sep = pwsh ? ';' : '&&' + return printf('%s %s %s %s', cd, plug#shellescape(a:dir, {'script': script, 'shell': &shell}), sep, a:cmd) endfunction function! s:system(cmd, ...) @@ -2321,7 +2383,9 @@ function! s:git_validate(spec, check_branch) let err = join(['Invalid URI: '.remote, \ 'Expected: '.a:spec.uri, \ 'PlugClean required.'], "\n") - elseif a:check_branch && has_key(a:spec, 'commit') + elseif !a:check_branch + return ['', 0] + elseif has_key(a:spec, 'commit') let sha = s:git_revision(a:spec.dir) if empty(sha) let err = join(add(result, 'PlugClean required.'), "\n") @@ -2330,34 +2394,35 @@ function! s:git_validate(spec, check_branch) \ a:spec.commit[:6], sha[:6]), \ 'PlugUpdate required.'], "\n") endif + elseif has_key(a:spec, 'tag') + let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) + if a:spec.tag !=# tag && a:spec.tag !~ '\*' + let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', + \ (empty(tag) ? 'N/A' : tag), a:spec.tag) + endif elseif a:check_branch let current_branch = result[0] - " Check tag let origin_branch = s:git_origin_branch(a:spec) - if has_key(a:spec, 'tag') - let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) - if a:spec.tag !=# tag && a:spec.tag !~ '\*' - let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', - \ (empty(tag) ? 'N/A' : tag), a:spec.tag) - endif - " Check branch - elseif origin_branch !=# current_branch + if origin_branch !=# current_branch let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', \ current_branch, origin_branch) endif if empty(err) - let [ahead, behind] = split(s:lastline(s:system([ - \ 'git', 'rev-list', '--count', '--left-right', - \ printf('HEAD...origin/%s', origin_branch) - \ ], a:spec.dir)), '\t') - if !v:shell_error && ahead - if behind + let ahead_behind = split(s:lastline(s:system([ + \ 'git', 'rev-list', '--count', '--left-right', + \ printf('HEAD...origin/%s', origin_branch) + \ ], a:spec.dir)), '\t') + if v:shell_error || len(ahead_behind) != 2 + let err = "Failed to compare with the origin. The default branch might have changed.\nPlugClean required." + else + let [ahead, behind] = ahead_behind + if ahead && behind " Only mention PlugClean if diverged, otherwise it's likely to be " pushable (and probably not that messed up). let err = printf( \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', origin_branch, ahead, behind) - else + elseif ahead let err = printf("Ahead of origin/%s by %d commit(s).\n" \ .'Cannot update until local changes are pushed.', \ origin_branch, ahead) @@ -2389,7 +2454,7 @@ function! s:clean(force) let errs = {} let [cnt, total] = [0, len(g:plugs)] for [name, spec] in items(g:plugs) - if !s:is_managed(name) + if !s:is_managed(name) || get(spec, 'frozen', 0) call add(dirs, spec.dir) else let [err, clean] = s:git_validate(spec, 1) @@ -2637,8 +2702,8 @@ function! s:preview_commit() return endif - if exists('g:plug_pwindow') && !s:is_preview_window_open() - execute g:plug_pwindow + if !s:is_preview_window_open() + execute get(g:, 'plug_pwindow', 'vertical rightbelow new') execute 'e' title else execute 'pedit' title @@ -8,7 +8,7 @@ set maxmempattern=32000 " https://github.com/neovim/neovim/issues/6798 set guicursor= -set nocscopeverbose +set noautoread set ignorecase set smartcase set modeline @@ -16,7 +16,6 @@ set modelines=5 set wildmode=longest:full set wildmenu set hlsearch -set pastetoggle=<F10> set textwidth=120 set backspace=eol,indent,start set number @@ -59,6 +58,8 @@ Plug 'airblade/vim-gitgutter' Plug 'vim-scripts/git-time-lapse' Plug 'vim-scripts/ifdef-highlighting' Plug 'jparise/vim-graphql' +"Plug 'junegunn/fzf' +"Plug 'junegunn/fzf.vim' Plug 'ctrlpvim/ctrlp.vim' Plug 'rust-lang/rust.vim' Plug 'scrooloose/nerdtree' @@ -67,6 +68,11 @@ Plug 'vim-scripts/taglist.vim' Plug 'tpope/vim-fugitive' Plug 'https://gitlab.com/Nate_B/vim-adif' Plug 'hashivim/vim-terraform' +"Plug 'airblade/vim-tailwind' +Plug 'https://gitlab.com/spade-lang/spade-vim' +Plug 'https://git.sr.ht/~sotirisp/vim-tsv' + +Plug 'prettier/vim-prettier' if has("nvim") Plug 'neovim/nvim-lspconfig' @@ -103,39 +109,49 @@ if has("nvim") -- Mappings. local opts = { noremap=true, silent=true } - -- See `:help vim.lsp.*` for documentation on any of the below functions - buf_set_keymap('n', 'gD', '<cmd>lua vim.lsp.buf.declaration()<CR>', opts) - buf_set_keymap('n', '<Leader>D', '<cmd>lua vim.lsp.buf.type_definition()<CR>', opts) - buf_set_keymap('n', 'gd', '<cmd>lua vim.lsp.buf.definition()<CR>', opts) - buf_set_keymap('n', 'gK', '<cmd>lua vim.lsp.buf.hover()<CR>', opts) - buf_set_keymap('n', 'gi', '<cmd>lua vim.lsp.buf.implementation()<CR>', opts) - buf_set_keymap('n', '<C-k>', '<cmd>lua vim.lsp.buf.signature_help()<CR>', opts) - --buf_set_keymap('n', '<Leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) - --buf_set_keymap('n', '<Leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) - --buf_set_keymap('n', '<Leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) - buf_set_keymap('n', '<F2>', '<cmd>lua vim.lsp.buf.rename()<CR>', opts) - buf_set_keymap('n', '<Leader>c', '<cmd>lua vim.lsp.buf.code_action()<CR>', opts) - buf_set_keymap('n', '<Leader>r', '<cmd>lua vim.lsp.buf.references()<CR>', opts) - buf_set_keymap('n', '<Leader>e', '<cmd>lua vim.lsp.diagnostic.show_line_diagnostics()<CR>', opts) - buf_set_keymap('n', '[d', '<cmd>lua vim.lsp.diagnostic.goto_prev()<CR>', opts) - buf_set_keymap('n', ']d', '<cmd>lua vim.lsp.diagnostic.goto_next()<CR>', opts) - buf_set_keymap('n', '<Leader>q', '<cmd>lua vim.lsp.diagnostic.set_loclist()<CR>', opts) - buf_set_keymap('n', '<Leader>F', '<cmd>lua vim.lsp.buf.formatting()<CR>', opts) - end + -- See `:help vim.lsp.*` for documentation on any of the below functions + --buf_set_keymap('n', '<Leader>wa', '<cmd>lua vim.lsp.buf.add_workspace_folder()<CR>', opts) + --buf_set_keymap('n', '<Leader>wr', '<cmd>lua vim.lsp.buf.remove_workspace_folder()<CR>', opts) + --buf_set_keymap('n', '<Leader>wl', '<cmd>lua print(vim.inspect(vim.lsp.buf.list_workspace_folders()))<CR>', opts) + -- Use a loop to conveniently call 'setup' on multiple servers and -- map buffer local keybindings when the language server attaches - local servers = { 'clangd', 'rust_analyzer', 'pylsp', 'tsserver' } + local servers = { 'clangd', 'rust_analyzer', 'pyright', 'ts_ls', 'verible', 'csharp_ls', 'bashls' } for _, lsp in ipairs(servers) do - nvim_lsp[lsp].setup { - on_attach = on_attach, - flags = { - debounce_text_changes = 150, - } - } + vim.lsp.config(lsp, { + settings = { + [lsp] = {} + } + }) + vim.lsp.enable(lsp) + --nvim_lsp[lsp].setup { + -- on_attach = on_attach, + -- flags = { + -- debounce_text_changes = 150, + -- } + --} end EOF + +noremap gD :lua vim.lsp.buf.declaration()<CR> +noremap <Leader>D :lua vim.lsp.buf.type_definition()<CR> +noremap gd :lua vim.lsp.buf.definition()<CR> +noremap gK :lua vim.lsp.buf.hover()<CR> +noremap gi :lua vim.lsp.buf.implementation()<CR> +noremap <C-k> :lua vim.lsp.buf.signature_help()<CR> +noremap <F2> :lua vim.lsp.buf.rename()<CR> +noremap <Leader>c :lua vim.lsp.buf.code_action()<CR> +noremap <Leader>r :lua vim.lsp.buf.references()<CR> +noremap <Leader>d :lua vim.diagnostic.open_float()<CR> +"noremap [d :lua vim.lsp.diagnostic.goto_prev()<CR> +"noremap ]d :lua vim.lsp.diagnostic.goto_next()<CR> +noremap <Leader>q :lua vim.lsp.diagnostic.set_loclist()<CR> +noremap <Leader>F :lua vim.lsp.buf.formatting()<CR> + +else + set pastetoggle=<F10> endif @@ -146,26 +162,23 @@ elseif executable('ag') let g:ackprg = 'ag -u --vimgrep' endif -noremap <Leader>a :LAck! -t rust -t cpp -t c -t py <cword><CR> +noremap <Leader>a :LAck! -t rust -t cpp -t c -t py -t ts -t cs -t js <cword><CR> noremap <Leader>A :LAck! <cword><CR> +noremap <Leader>p :%!prettier %<CR> "Show + - ~ in the margin for vim modification let g:gitgutter_eager = 0 " only update on read/write " Also search tags let g:ctrlp_extensions = ['tag'] -noremap <Leader>p :CtrlP<CR> noremap <Leader>b :CtrlPBuffer<CR> "let g:ctrlp_working_path_mode = 'a' -" Ignore some folders and files for CtrlP indexing -let g:ctrlp_custom_ignore = { 'dir': '\.git$\|\CODENAME_Data' } - "rust-lang/rust.vim let g:rust_recommended_style = 0 au FileType rust nmap <Leader>m :make build<CR> -au FileType rust nmap <Leader>c :Cargo check<CR> +au FileType rust nmap <Leader>C :Cargo check<CR> noremap <Leader>t :TagbarToggle<CR> |
