diff --git a/home/common/coc.vim b/home/common/coc.vim index 86cbe04..e9b6f30 100644 --- a/home/common/coc.vim +++ b/home/common/coc.vim @@ -1,3 +1,9 @@ +" You will have bad experience for diagnostic messages when it's default 4000. +set updatetime=300 + +" don't give |ins-completion-menu| messages. +set shortmess+=c + " Use tab for trigger completion with characters ahead and navigate. " Use command ':verbose imap <tab>' to make sure tab is not mapped by other plugin. inoremap <silent><expr> <TAB> @@ -11,11 +17,15 @@ let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction +" 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. inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" -" Use <c-space> to trigger completion. -inoremap <silent><expr> <c-space> coc#refresh() +" Use `[g` and `]g` to navigate diagnostics +nmap <silent> [g <Plug>(coc-diagnostic-prev) +nmap <silent> ]g <Plug>(coc-diagnostic-next) " Remap keys for gotos nmap <silent> gd <Plug>(coc-definition) @@ -23,6 +33,17 @@ 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 window +nnoremap <silent> K :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 + " Highlight symbol under cursor on CursorHold autocmd CursorHold * silent call CocActionAsync('highlight') @@ -33,6 +54,14 @@ nmap <leader>rn <Plug>(coc-rename) xmap <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 + " Remap for do codeAction of selected region, ex: `<leader>aap` for current paragraph xmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) @@ -42,5 +71,39 @@ nmap <leader>ac <Plug>(coc-codeaction) " Fix autofix problem of current line nmap <leader>qf <Plug>(coc-fix-current) +" Create mappings for function text object, requires document symbols feature of languageserver. +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 select selections ranges, needs server support, like: coc-tsserver, coc-python +nmap <silent> <TAB> <Plug>(coc-range-select) +xmap <silent> <TAB> <Plug>(coc-range-select) + " Use `:Format` to format current buffer command! -nargs=0 Format :call CocAction('format') + +" Use `:Fold` to fold current buffer +command! -nargs=? Fold :call CocAction('fold', <f-args>) + +" use `:OR` for organize import of current buffer +command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') + +" Using CocList +" Show all diagnostics +nnoremap <silent> <space>a :<C-u>CocList diagnostics<cr> +" Manage extensions +nnoremap <silent> <space>e :<C-u>CocList extensions<cr> +" Show commands +nnoremap <silent> <space>c :<C-u>CocList commands<cr> +" Find symbol of current document +nnoremap <silent> <space>o :<C-u>CocList outline<cr> +" Search workspace symbols +nnoremap <silent> <space>s :<C-u>CocList -I symbols<cr> +" Do default action for next item. +nnoremap <silent> <space>j :<C-u>CocNext<CR> +" Do default action for previous item. +nnoremap <silent> <space>k :<C-u>CocPrev<CR> +" Resume latest coc list +nnoremap <silent> <space>p :<C-u>CocListResume<CR> diff --git a/home/common/init.vim b/home/common/init.vim index 97ccd80..b573f11 100644 --- a/home/common/init.vim +++ b/home/common/init.vim @@ -8,11 +8,33 @@ let g:startify_bookmarks = [ \ '~/dev/fitnesspilot/microservices/coachtasks', \ '~/dev/fitnesspilot/microservices/notifications', \ '~/dev/fitnesspilot/microservices/googlefitimport', + \ '~/dev/fitnesspilot/microservices/devel', + \ '~/dev/fitnesspilot/common/APIModel', + \ '~/dev/fitnesspilot/common/CommonModel', + \ '~/dev/fitnesspilot/common/CommonDomain', + \ '~/dev/fitnesspilot/common/CosmosDBStore', + \ '~/dev/fitnesspilot/common/IntegrationTestBase', + \ '~/dev/fitnesspilot/common/MicroserviceUtils', + \ '~/dev/fitnesspilot/common/Utils', + \ '~/dev/fitnesspilot/common/FitnesspilotMathCore', + \ '/etc/nixos', \ ] let mapleader=" " let g:camelcasemotion_key = '<leader>' +let g:lightline = { + \ 'colorscheme': 'powerline', + \ 'active': { + \ 'left': [ [ 'mode', 'paste' ], + \ [ 'cocstatus', 'currentfunction', 'readonly', 'filename', 'modified' ] ] + \ }, + \ 'component_function': { + \ 'cocstatus': 'coc#status', + \ 'currentfunction': 'CocCurrentFunction' + \ }, + \ } + " omnisharp-vim config: let g:OmniSharp_start_without_solution = 1 let g:OmniSharp_server_stdio = 1