" Custom statusline report function! CocStatus() abort let info = get(b:, 'coc_diagnostic_info', {}) if empty(info) | return '' | endif let msgs = [] if get(info, 'warning', 0) call add(msgs, 'W' . info['warning']) endif if get(info, 'information', 0) call add(msgs, 'I' . info['information']) endif if get(info, 'hint', 0) call add(msgs, 'H' . info['hint']) endif return join(msgs, ' ') . ' ' . get(g:, 'coc_status', '') endfunction function! CocStatusDiagnosticError() abort let info = get(b:, 'coc_diagnostic_info', {}) if !empty(info) && get(info, 'error', 0) return ('E' . info['error']) endif return '' endfunction " Refresh statusline when g:coc_status changes autocmd User CocStatusChange let &statusline=&statusline "autocmd CursorHold let &statusline=&statusline " Get correct comment highlighting in coc-settings.json autocmd FileType json syntax match Comment +\/\/.\+$+ " Highlights hi CocErrorFloat ctermfg=darkred hi CocErrorSign term=standout ctermfg=15 ctermbg=1 guifg=White guibg=Red hi CocWarningSign term=standout ctermfg=15 ctermbg=130 guifg=White guibg=Orange "hi! link CocErrorSign ErrorMsg "hi! link CocWarningSign WarningMsg hi CocFloating ctermbg=gray ctermfg=black hi CocHintSign ctermbg=gray ctermfg=black hi CocInfoSign ctermbg=darkblue ctermfg=black " Some servers have issues with backup files, see #649. "set nobackup "set nowritebackup " Give more space for displaying messages. "set cmdheight=2 " Completion set completeopt=noinsert,noselect,menuone " Don't pass messages to |ins-completion-menu|. set shortmess+=c " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by " other plugin before putting this into your config. inoremap <silent><expr> <TAB> \ pumvisible() ? "\<C-n>" : \ <SID>check_back_space() ? "\<TAB>" : \ coc#refresh() function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" " Use <c-space> to trigger completion. inoremap <silent><expr> <c-space> coc#refresh() " Use <cr> to confirm completion, `<C-g>u` means break undo chain at current position. " Coc only does snippet and additional edit on confirm. if has('patch8.1.1068') " Use `complete_info` if your (Neo)Vim version supports it. inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" else imap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" endif " Use `[g` and `]g` to navigate diagnostics "nmap <silent> [g <Plug>(coc-diagnostic-prev) "nmap <silent> ]g <Plug>(coc-diagnostic-next) " GoTo code navigation. nmap <silent> gd <Plug>(coc-definition) nmap <silent> gr <Plug>(coc-references) " Do not seem to work for haskell-ide-engine nmap <silent> gy <Plug>(coc-type-definition) nmap <silent> gi <Plug>(coc-implementation) " Use H to show documentation in preview window. nnoremap <silent> H :call <SID>show_documentation()<CR> function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('<cword>') else call CocAction('doHover') endif endfunction " Escape hides floating window nmap <silent> <c-[> <esc>:noh<cr><Plug>(coc-float-hide) " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. nmap <leader>rn <Plug>(coc-rename) " Formatting selected code. xmap <leader>f <Plug>(coc-format-selected) nmap <leader>f <Plug>(coc-format-selected) augroup coc 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: `<leader>aap` for current paragraph xmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) " Remap keys for applying codeAction to the current line. nmap <leader>al <Plug>(coc-codeaction) " Apply AutoFix to problem on the current line. nmap <leader>qf <Plug>(coc-fix-current) " Introduce function text object " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if <Plug>(coc-funcobj-i) xmap af <Plug>(coc-funcobj-a) omap if <Plug>(coc-funcobj-i) omap af <Plug>(coc-funcobj-a) " Use <TAB> for selections ranges. " NOTE: Requires 'textDocument/selectionRange' support from the language server. " coc-tsserver, coc-python are the examples of servers that support it. "nmap <silent> <TAB> <Plug>(coc-range-select) "xmap <silent> <TAB> <Plug>(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', <f-args>) command! -nargs=? Unfold :0,$foldopen " Add `:OR` command for organize imports of the current buffer. command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') " CocList " Show all diagnostics. nnoremap <silent> <space>fa :<C-u>CocList diagnostics<cr> " Manage extensions. nnoremap <silent> <leader>fe :<C-u>CocList extensions<cr> " Show commands. nnoremap <silent> <leader>fc :<C-u>CocList commands<cr> " Find symbol of current document. nnoremap <silent> <leader>fo :<C-u>CocList outline<cr> " Search workspace symbols. nnoremap <silent> <leader>fs :<C-u>CocList -I symbols<cr> " Do default action for next item in the last list. nnoremap <silent> <leader>fj :<C-u>CocNext<CR> " Do default action for previous item in the last list. nnoremap <silent> <leader>fk :<C-u>CocPrev<CR> " Resume latest coc list. nnoremap <silent> <leader>fp :<C-u>CocListResume<CR> " Find files in cwd. nnoremap <silent> <leader>ff :<C-u>CocList files<CR> " List all errors (bugs). nnoremap <silent> <leader>fb :<C-u>CocList locationlist<CR> " Find buffers. "TODO map <c-s> and <c-v> to open with splits. nnoremap <silent> <leader>bf :<C-u>CocList buffers<CR>