dotfiles

Clean dotfiles
git clone git://git.dimitrijedobrota.com/dotfiles.git
Log | Files | Refs

clangd.vim (2944B)


0 " Set up VIM language server using clangd
2 if executable('clangd')
3 augroup lsp_clangd
4 autocmd!
5 autocmd User lsp_setup call lsp#register_server({
6 \ 'name': 'clangd',
7 \ 'cmd': {server_info->['clangd']},
8 \ 'whitelist': ['c', 'cpp', 'objc', 'objcpp'],
9 \ })
10 autocmd FileType c setlocal omnifunc=lsp#complete
11 autocmd FileType cpp setlocal omnifunc=lsp#complete
12 autocmd FileType objc setlocal omnifunc=lsp#complete
13 autocmd FileType objcpp setlocal omnifunc=lsp#complete
14 augroup end
15 endif
17 function! s:on_lsp_buffer_enabled() abort
18 setlocal omnifunc=lsp#complete
19 setlocal signcolumn=yes
20 if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
21 nmap <buffer> gd <plug>(lsp-definition)
22 nmap <buffer> gs <plug>(lsp-document-symbol-search)
23 nmap <buffer> gf <plug>(lsp-document-format)
24 nmap <buffer> gD <plug>(lsp-document-diagnostics)
25 nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
26 nmap <buffer> gR <plug>(lsp-references)
27 nmap <buffer> gi <plug>(lsp-implementation)
28 nmap <buffer> gt <plug>(lsp-type-definition)
29 nmap <buffer> <leader>rn <plug>(lsp-rename)
30 nmap <buffer> [g <plug>(lsp-previous-diagnostic)
31 nmap <buffer> ]g <plug>(lsp-next-diagnostic)
32 nmap <buffer> K <plug>(lsp-hover)
33 nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
34 nnoremap <buffer> <expr><c-d> lsp#scroll(-4)
36 let g:lsp_format_sync_timeout = 1000
37 autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
39 " refer to doc to add more commands
40 endfunction
42 augroup lsp_install
43 au!
44 " call s:on_lsp_buffer_enabled only for languages that has the server registered.
45 autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
46 augroup END
48 " set foldmethod=expr
49 " \ foldexpr=lsp#ui#vim#folding#foldexpr()
50 " \ foldtext=lsp#ui#vim#folding#foldtext()
52 " Key bindings for vim-lsp.
53 nn <silent> <M-d> :LspDefinition<cr>
54 nn <silent> <M-r> :LspReferences<cr>
55 nn <f2> :LspRename<cr>
56 nn <silent> <M-a> :LspWorkspaceSymbol<cr>
57 nn <silent> <M-l> :LspDocumentSymbol<cr>
59 highlight lspReference ctermfg=red guifg=red ctermbg=NONE guibg=green
61 autocmd User asyncomplete_setup call asyncomplete#register_source(
62 \ asyncomplete#sources#clang#get_source_options())
64 " Key bindings for asyncomplete
65 inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
66 inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
67 inoremap <expr> <cr> pumvisible() ? asyncomplete#close_popup() : "\<cr>"
69 let g:asyncomplete_auto_popup = 0
71 function! s:check_back_space() abort
72 let col = col('.') - 1
73 return !col || getline('.')[col - 1] =~ '\s'
74 endfunction
76 inoremap <silent><expr> <TAB>
77 \ pumvisible() ? "\<C-n>" :
78 \ <SID>check_back_space() ? "\<TAB>" :
79 \ asyncomplete#force_refresh()
80 inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>"
82 let g:asyncomplete_auto_completeopt = 0
83 set completeopt=menuone,noinsert,noselect,preview
84 autocmd! CompleteDone * if pumvisible() == 0 | pclose | endif