From f5d92b4f360dd2d0208fea65e4a7321970309999 Mon Sep 17 00:00:00 2001 From: Anthony Perkins Date: Tue, 9 Mar 2021 22:15:25 +0000 Subject: [PATCH] Improve coc settings --- .gitignore | 1 + coc-settings.json | 6 -- plugins.md | 1 + vimrc | 142 ++++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 140 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index a0e76af..831f037 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .netrwhist +coc/extensions/db.json diff --git a/coc-settings.json b/coc-settings.json index 7bba792..b16d0a4 100644 --- a/coc-settings.json +++ b/coc-settings.json @@ -1,10 +1,4 @@ { "languageserver": { - "go": { - "command": "gopls", - "rootPatterns": ["go.mod"], - "trace.server": "verbose", - "filetypes": ["go"] - } } } diff --git a/plugins.md b/plugins.md index f38133d..5f9cd1d 100644 --- a/plugins.md +++ b/plugins.md @@ -4,6 +4,7 @@ Git submodules are slow, so handle this manually. ## pack/acp/opt/ +* [coc.nvim](https://github.com/neoclide/coc.nvim) * [vim-pathogen](https://github.com/tpope/vim-pathogen) ## pack/acp/start/ diff --git a/vimrc b/vimrc index 28629b7..d5902ec 100644 --- a/vimrc +++ b/vimrc @@ -2,7 +2,7 @@ " https://git.acperkins.com/acp/vimfiles " " Distributed under the VIM license. See ':help license' for a copy. -" Files under pack/ have their own licenses. +" Files under pack/ and coc/extensions/node_modules/ have their own licenses. " " Includes parts from Tim Pope's «sensible.vim» " . @@ -21,8 +21,6 @@ endif "============================================================================= " General settings for all builds. -nmap - inoremap inoremap ^ inoremap $ @@ -47,11 +45,13 @@ set autoindent set autoread set background=dark set backspace=indent,eol,start +set cmdheight=1 set colorcolumn=101 set directory=$TEMP//,/tmp//,. set display+=lastline set encoding=utf-8 set formatoptions-=t +set hidden set history=1000 set ignorecase set incsearch @@ -61,8 +61,10 @@ set linebreak set list set listchars=tab:→·,trail:~,extends:>,precedes:< set modelines=0 +set nobackup set noexpandtab set nomodeline +set nowritebackup set nrformats-=octal set numberwidth=8 set relativenumber @@ -116,7 +118,7 @@ if has("eval") else set t_Co=16 endif - colorscheme joker + colorscheme PaperColor set termguicolors endif @@ -164,7 +166,20 @@ else endif if !empty($VIMCOC) && has("patch-8.1.1719") && (executable("nodejs") || executable("node")) + if has("win32") + let g:coc_data_home = resolve("~/vimfiles/coc") + else + if has("nvim") + let g:coc_data_home = resolve("~/.config/nvim/coc") + else + let g:coc_data_home = resolve("~/.vim/coc") + endif + endif packadd coc.nvim + + " Give more space for displaying messages. + set cmdheight=2 + " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap ' to make sure tab is not mapped by " other plugin before putting this into your config. @@ -179,8 +194,127 @@ if !empty($VIMCOC) && has("patch-8.1.1719") && (executable("nodejs") || executab return !col || getline('.')[col - 1] =~# '\s' endfunction + " Use to trigger completion. + if has("nvim") + inoremap coc#refresh() + else + inoremap coc#refresh() + endif + + " Make auto-select the first completion item and notify coc.nvim to + " format on enter, could be remapped by other vim plugin inoremap pumvisible() ? coc#_select_confirm() \: "\u\\=coc#on_enter()\" + + " Use `[g` and `]g` to navigate diagnostics + " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. + nmap [g (coc-diagnostic-prev) + nmap ]g (coc-diagnostic-next) + + " GoTo code navigation. + nmap gd (coc-definition) + nmap gy (coc-type-definition) + nmap gi (coc-implementation) + nmap gr (coc-references) + + " Use K to show documentation in preview window. + nnoremap K :call show_documentation() + + function! s:show_documentation() + if (index(['vim','help'], &filetype) >= 0) + execute 'h '.expand('') + elseif (coc#rpc#ready()) + call CocActionAsync('doHover') + else + execute '!' . &keywordprg . " " . expand('') + endif + endfunction + + " Highlight the symbol and its references when holding the cursor. + autocmd CursorHold * silent call CocActionAsync('highlight') + + " Symbol renaming. + nmap rn (coc-rename) + + " Formatting selected code. + xmap f (coc-format-selected) + nmap f (coc-format-selected) + + augroup mygroup + autocmd! + " Setup formatexpr specified filetype(s). + autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') + " Update signature help on jump placeholder. + autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') + augroup end + + " Applying codeAction to the selected region. + " Example: `aap` for current paragraph + xmap a (coc-codeaction-selected) + nmap a (coc-codeaction-selected) + + " Remap keys for applying codeAction to the current buffer. + nmap ac (coc-codeaction) + " Apply AutoFix to problem on the current line. + nmap qf (coc-fix-current) + + " Map function and class text objects + " NOTE: Requires 'textDocument.documentSymbol' support from the language server. + xmap if (coc-funcobj-i) + omap if (coc-funcobj-i) + xmap af (coc-funcobj-a) + omap af (coc-funcobj-a) + xmap ic (coc-classobj-i) + omap ic (coc-classobj-i) + xmap ac (coc-classobj-a) + omap ac (coc-classobj-a) + + " Remap and for scroll float windows/popups. + if has("nvim-0.4.0") || has("patch-8.2.0750") + nnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + nnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(1)\" : "\" + inoremap coc#float#has_scroll() ? "\=coc#float#scroll(0)\" : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(1) : "\" + vnoremap coc#float#has_scroll() ? coc#float#scroll(0) : "\" + endif + + " Use CTRL-S for selections ranges. + " Requires 'textDocument/selectionRange' support of language server. + nmap (coc-range-select) + xmap (coc-range-select) + + " Add `:Format` command to format current buffer. + command! -nargs=0 Format :call CocAction('format') + + " Add `:Fold` command to fold current buffer. + command! -nargs=? Fold :call CocAction('fold', ) + + " Add `:OR` command for organize imports of the current buffer. + command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + + " Add (Neo)Vim's native statusline support. + " NOTE: Please see `:h coc-status` for integrations with external plugins that + " provide custom statusline: lightline.vim, vim-airline. + set statusline^=%f\ %{coc#status()}%{get(b:,'coc_current_function','')}%=%l,%c%V\ %P + + " Mappings for CoCList + " Show all diagnostics. + nnoremap a :CocList diagnostics + " Manage extensions. + nnoremap e :CocList extensions + " Show commands. + nnoremap c :CocList commands + " Find symbol of current document. + nnoremap o :CocList outline + " Search workspace symbols. + nnoremap s :CocList -I symbols + " Do default action for next item. + nnoremap j :CocNext + " Do default action for previous item. + nnoremap k :CocPrev + " Resume latest coc list. + nnoremap p :CocListResume endif if has("printer")