" Use tab for trigger completion with characters ahead and navigate. inoremap \ pumvisible() ? "\" : \ check_back_space() ? "\" : \ coc#refresh() inoremap pumvisible() ? "\" : "\" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use to trigger completion. inoremap coc#refresh() " Use to confirm completion, `u` means break undo chain at current " position. Coc only does snippet and additional edit on confirm. if exists('*complete_info') inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" else imap pumvisible() ? "\" : "\u\" endif " 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 " set keywordprg=:call\ CocActionAsync('doHover') " augroup VimHelp " autocmd! " autocmd Filetype vim,help setlocal keywordprg=:help " augroup END " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. " nmap rn (coc-rename) 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 line. " nmap ac (coc-codeaction) " Apply AutoFix to problem on the current line. " nmap qf (coc-fix-current) " Introduce function text object " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if (coc-funcobj-i) xmap af (coc-funcobj-a) omap if (coc-funcobj-i) omap af (coc-funcobj-a) " Remap and for scroll float windows/popups. " Note coc#float#scroll works on neovim >= 0.4.3 or vim >= 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)\" : "\" " NeoVim-only mapping for visual mode scroll " Useful on signatureHelp after jump placeholder of snippet expansion if has('nvim') vnoremap coc#float#has_scroll() ? coc#float#nvim_scroll(1, 1) : "\" vnoremap coc#float#has_scroll() ? coc#float#nvim_scroll(0, 1) : "\" endif " 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^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings using CoCList: " Show all diagnostics. " TODO add these to which key " 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 " Explorer let g:coc_explorer_global_presets = { \ 'floating': { \ 'position': 'floating', \ }, \ 'floatingLeftside': { \ 'position': 'floating', \ 'floating-position': 'left-center', \ 'floating-width': 30, \ }, \ 'floatingRightside': { \ 'position': 'floating', \ 'floating-position': 'right-center', \ 'floating-width': 30, \ }, \ 'simplify': { \ 'file.child.template': '[selection | clip | 1] [indent][icon | 1] [filename omitCenter 1]' \ } \ } "nmap e :CocCommand explorer " nnoremap e :CocCommand explorer " nmap f :CocCommand explorer --preset floatingRightside autocmd BufEnter * if (winnr("$") == 1 && &filetype == 'coc-explorer') | q | endif " Snippets " 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) augroup MyCocExplorer autocmd! autocmd VimEnter * sil! au! FileExplorer * autocmd BufEnter * let d = expand('%') | if isdirectory(d) | silent! bd | exe 'CocCommand explorer ' . d | endif augroup END