let g:coc_global_extensions = [ \ 'coc-marketplace', \ 'coc-explorer', \ 'coc-actions', \ 'coc-vimtex', \ 'coc-vimlsp', \ 'coc-tsserver', \ 'coc-html', \ 'coc-lit-html', \ 'coc-emmet', \ 'coc-yaml', \ 'coc-css', \ 'coc-cssmodules', \ 'coc-json', \ 'coc-pyright', \ 'coc-clangd', \ 'coc-db', \ 'coc-docker', \ 'coc-cmake', \ 'coc-snippets', \ 'coc-lists', \ 'coc-word', \ 'coc-emoji', \ 'coc-syntax', \ 'coc-yank', \ ] " \ 'coc-xml', " \ 'coc-go', " \ 'coc-rls', " \ 'coc-java', " \ 'coc-java-debug', " \ 'coc-highlight', " \ 'coc-lua', " \ 'coc-pairs', " \ 'coc-spell-checker', " \ 'coc-tabnine', " \ 'coc-sh', " \ 'coc-fish', " \ 'coc-jest', " \ 'coc-restclient', " \ 'coc-vetur', " TextEdit might fail if hidden is not set. set hidden " Some servers have issues with backup files, see #649. set nobackup set nowritebackup " Give more space for displaying messages. set cmdheight=2 " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable " delays and poor user experience. set updatetime=300 " Don't pass messages to |ins-completion-menu|. set shortmess+=c " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. if has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one set signcolumn=number else set signcolumn=yes endif " Remap for doing codeAction of selected region function! s:cocActionsOpenFromSelected(type) abort execute 'CocCommand actions.open ' . a:type endfunction xmap la :execute 'CocCommand actions.open ' . visualmode() nmap la :set operatorfunc=cocActionsOpenFromSelectedg@ " 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. inoremap \ pumvisible() ? "\" : \ coc#expandableOrJumpable() ? "\=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction let g:coc_snippet_next = '' " 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 to confirm completion, `u` means break undo chain at current " position. Coc only does snippet and additional edit on confirm. " could be remapped by other vim plugin, try `:verbose imap `. if exists('*complete_info') inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" else inoremap pumvisible() ? "\" : "\u\" endif " 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) " CocSearch nnoremap ? :CocSearch --follow --hidden =expand("") " 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') 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 " 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) " Use CTRL-S for selections ranges. " Requires 'textDocument/selectionRange' support of LS, ex: coc-tsserver 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 `:Prettier` command for formatting current buffer " command! -nargs=0 Prettier :CocCommand prettier.formatFile " coc-jest command! -nargs=0 Jest :call CocAction('runCommand', 'jest.projectTest') command! -nargs=0 JestCurrent :call CocAction('runCommand', 'jest.fileTest', ['%']) command! -nargs=0 JestSingle :call CocAction('runCommand', 'jest.singleTest') command! JestInit :call CocAction('runCommand', 'jest.init') " 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^=%{coc#status()}%{get(b:,'coc_current_function','')} " Use for trigger snippet expand. imap (coc-snippets-expand) " Use for select text for visual placeholder of snippet. vmap (coc-snippets-select) " Use for jump to next placeholder, it's default of coc.nvim let g:coc_snippet_next = '' " Use for jump to previous placeholder, it's default of coc.nvim let g:coc_snippet_prev = '' " Use for both expand and jump (make expand higher priority.) imap (coc-snippets-expand-jump) " Vimlsp let g:markdown_fenced_languages = [ \ 'vim', \ 'help' \] " coc-explorer auto-dir function s:explorer_inited() autocmd BufEnter * if (&filetype != 'coc-explorer') | exe 'silent! let dir = getcwd()' autocmd BufEnter * call CocActionAsync("runCommand", "explorer.doAction", "closest", {"name": "cd", "args": [dir]}) endfunction autocmd User CocExplorerOpenPost call s:explorer_inited() " Quit if only explorer exists autocmd BufEnter * if (winnr("$") == 1 && &filetype == 'coc-explorer') | q | endif " Startscreen " autocmd StdinReadPre * let s:std_in=1 " autocmd VimEnter * " \ if argc() != 0 || exists("s:std_in") " \| execute 'CocCommand explorer --no-focus ' . getcwd() " \| endif