2023年8月17日
COC VIM
vim plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vimcoc vim
call plug#begin()" The default plugin directory will be as follows:" - Vim (Linux/macOS): '~/.vim/plugged'" - Vim (Windows): '~/vimfiles/plugged'" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'" You can specify a custom plugin directory by passing it as the argument" - e.g. `call plug#begin('~/.vim/plugged')`" - Avoid using standard Vim directory names like 'plugin'
" Make sure you use single quotes
" Use release branch (recommend)Plug 'neoclide/coc.nvim', {'branch': 'release'}
" Initialize plugin systemcall plug#end():CocInstall coc-clangdsudo apt-get install clangd:CocConfig"languageserver": { "ccls": { "command": "ccls", "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"], "rootPatterns": [".ccls", "compile_commands.json", ".git/", ".hg/"], "initializationOptions": { "cache": { "directory": "/tmp/ccls" } } }}clang++%h %cpp -std=c++17生成COMPILE_COMMANDS.json用于include path自动提示
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..call plug#begin()" The default plugin directory will be as follows:" - Vim (Linux/macOS): '~/.vim/plugged'" - Vim (Windows): '~/vimfiles/plugged'" - Neovim (Linux/macOS/Windows): stdpath('data') . '/plugged'" You can specify a custom plugin directory by passing it as the argument" - e.g. `call plug#begin('~/.vim/plugged')`" - Avoid using standard Vim directory names like 'plugin'
" Make sure you use single quotes #确保使用单引号!!!
" On-demand loadingPlug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }Plug 'Yggdroot/LeaderF', { 'do': './install.sh' }Plug 'neoclide/coc.nvim', {'branch': 'release'}Plug 'preservim/nerdcommenter'call plug#end()
noremap <Leader>t :NERDTreeToggle<CR>noremap <Leader>f :NERDTreeFind<CR>
noremap <Leader>b :call Compile()<CR>function! Compile() execute "w" if !isdirectory('build') execute "!mkdir build" endif execute "!cmake -S . -B build" execute "!cmake --build build"endfunction
" Coc Config" TextEdit might fail if hidden is note setset hiddenset foldmethod=indent" May need for Vim (not Neovim) since coc.nvim calculates byte offset by count" utf-8 byte sequenceset encoding=utf-8" Some servers have issues with backup files, see #649set nobackupset nowritebackup
" Having longer updatetime (default is 4000 ms = 4s) leads to noticeable" delays and poor user experienceset updatetime=300
" Always show the signcolumn, otherwise it would shift the text each time" diagnostics appear/become resolvedset signcolumn=yes
" Use tab for trigger completion with characters ahead and navigate" NOTE: There's always complete item selected by default, you may want to enable" no select by `"suggest.noselect": true` in your configuration file" NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by" other plugin before putting this into your configinoremap <silent><expr> <TAB> \ coc#pum#visible() ? coc#pum#next(1) : \ CheckBackspace() ? "\<Tab>" : \ coc#refresh()inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
" Make <CR> to accept selected completion item or notify coc.nvim to format" <C-g>u breaks current undo, please make your own choiceinoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm() \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s'endfunction
" Use <c-space> to trigger completionif has('nvim') inoremap <silent><expr> <c-space> coc#refresh()else inoremap <silent><expr> <c-@> coc#refresh()endif
" Use `[g` and `]g` to navigate diagnostics" Use `:CocDiagnostics` to get all diagnostics of current buffer in location listnmap <silent> [g <Plug>(coc-diagnostic-prev)nmap <silent> ]g <Plug>(coc-diagnostic-next)
" GoTo code navigationnmap <silent> gd <Plug>(coc-definition)nmap <silent> gy <Plug>(coc-type-definition)nmap <silent> gi <Plug>(coc-implementation)nmap <silent> gr <Plug>(coc-references)
" Use K to show documentation in preview windownnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation() if CocAction('hasProvider', 'hover') call CocActionAsync('doHover') else call feedkeys('K', 'in') endifendfunction
" Highlight the symbol and its references when holding the cursorautocmd CursorHold * silent call CocActionAsync('highlight')
" Symbol renamingnmap <leader>rn <Plug>(coc-rename)
" Formatting selected codexmap <leader>f <Plug>(coc-format-selected)nmap <leader>f <Plug>(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 code actions to the selected code block" Example: `<leader>aap` for current paragraphxmap <leader>a <Plug>(coc-codeaction-selected)nmap <leader>a <Plug>(coc-codeaction-selected)
" Remap keys for applying code actions at the cursor positionnmap <leader>ac <Plug>(coc-codeaction-cursor)" Remap keys for apply code actions affect whole buffernmap <leader>as <Plug>(coc-codeaction-source)" Apply the most preferred quickfix action to fix diagnostic on the current linenmap <leader>qf <Plug>(coc-fix-current)
" Remap keys for applying refactor code actionsnmap <silent> <leader>re <Plug>(coc-codeaction-refactor)xmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)nmap <silent> <leader>r <Plug>(coc-codeaction-refactor-selected)
" Run the Code Lens action on the current linenmap <leader>cl <Plug>(coc-codelens-action)
" Map function and class text objects" NOTE: Requires 'textDocument.documentSymbol' support from the language serverxmap if <Plug>(coc-funcobj-i)omap if <Plug>(coc-funcobj-i)xmap af <Plug>(coc-funcobj-a)omap af <Plug>(coc-funcobj-a)xmap ic <Plug>(coc-classobj-i)omap ic <Plug>(coc-classobj-i)xmap ac <Plug>(coc-classobj-a)omap ac <Plug>(coc-classobj-a)
" Remap <C-f> and <C-b> to scroll float windows/popupsif has('nvim-0.4.0') || has('patch-8.2.0750') nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>" inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>" inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>" vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>" vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"endif
" Use CTRL-S for selections ranges" Requires 'textDocument/selectionRange' support of language servernmap <silent> <C-s> <Plug>(coc-range-select)xmap <silent> <C-s> <Plug>(coc-range-select)
" Add `:Format` command to format current buffercommand! -nargs=0 Format :call CocActionAsync('format')
" Add `:Fold` command to fold current buffercommand! -nargs=? Fold :call CocAction('fold', <f-args>)
" Add `:OR` command for organize imports of the current buffercommand! -nargs=0 OR :call CocActionAsync('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-airlineset statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
" Mappings for CoCList" Show all diagnosticsnnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr>" Manage extensionsnnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr>" Show commandsnnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr>" Find symbol of current documentnnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr>" Search workspace symbolsnnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr>" Do default action for next itemnnoremap <silent><nowait> <space>j :<C-u>CocNext<CR>" Do default action for previous itemnnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR>" Resume latest coc listnnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>问题
coc.nvim works best on vim >= 8.2.0750 and neovim >= 0.5.0, consider upgrading vim.You can add this to your vimrc to avoid this message: let g:coc_disable_startup_warning = 1Note that some features may behave incorrectly.请按 ENTER 或其它命令继续sudo add-apt-repository ppa:jonathonf/vimsudo apt updatesudo apt install vimCopilot vim
git clone https://github.com/github/copilot.vim.git \ ~/.vim/pack/github/start/copilot.vim:Copilot setup