diff options
| -rw-r--r-- | vim/.vimrc | 127 |
1 files changed, 52 insertions, 75 deletions
@@ -11,15 +11,12 @@ Plug 'liuchengxu/vim-which-key' Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'kamil-stachowski/flatwhite-vim' -Plug 'prabirshrestha/vim-lsp' -Plug 'mattn/vim-lsp-settings' -Plug 'prabirshrestha/asyncomplete.vim' -Plug 'prabirshrestha/asyncomplete-lsp.vim' Plug 'ap/vim-buftabline' Plug 'sheerun/vim-polyglot' Plug 'tpope/vim-commentary' -Plug 'prabirshrestha/asyncomplete-emmet.vim' -Plug 'keremc/asyncomplete-clang.vim' +Plug 'yegappan/lsp' +Plug 'mattn/vim-lsp-settings' +Plug 'normen/vim-lsp-settings-adapter' Plug 'kalbasit/vim-colemak' call plug#end() let mapleader = "\<Space>" @@ -86,77 +83,57 @@ let g:which_key_map.b = { \ } call which_key#register('<Space>', 'g:which_key_map') " lsp -if executable('pylsp') - au User lsp_setup call lsp#register_server({ - \ 'name': 'pylsp', - \ 'cmd': {server_info->['pylsp']}, - \ 'allowlist': ['python'], - \ }) -endif -if executable('clangd') - au User lsp_setup call lsp#register_server({ - \ 'name': 'clangd', - \ 'cmd': {server_info->['clangd', '-background-index']}, - \ 'allowlist': ['c', 'cpp', 'objc', 'objcpp'], - \}) -endif -if executable('emmet-language-server') - au User asyncomplete_setup call asyncomplete#register_source(asyncomplete#sources#emmet#get_source_options({ - \ 'name': 'emmet', - \ 'whitelist': ['html'], - \ 'completor': function('asyncomplete#sources#emmet#completor'), - \ })) -endif -if executable('vscode-html-language-server') - autocmd User lsp_setup call lsp#register_server({ - \ 'name': 'vscode-html-language-server', - \ 'cmd': {server_info->[&shell, &shellcmdflag, 'vscode-html-language-server --stdio']}, - \ 'whitelist': ['html'], - \ 'initialization_options': { - \ 'provideFormatter': v:true, - \ 'embeddedLanguages': {'css': v:true, 'javascript': v:true} - \ }}) -endif -if executable('vscode-css-language-server') - au User lsp_setup call lsp#register_server({ - \ 'name': 'css', - \ 'cmd': {server_info->['vscode-css-language-server']}, - \ 'allowlist': ['css', 'scss', 'less'], - \}) -endif -if executable('typescript-language-server') - au User lsp_setup call lsp#register_server({ - \ 'name': 'javascript support using typescript-language-server', - \ 'cmd': { server_info->[&shell, &shellcmdflag, 'typescript-language-server --stdio']}, - \ 'root_uri': { server_info->lsp#utils#path_to_uri(lsp#utils#find_nearest_parent_directory(lsp#utils#get_buffer_path(), '.git/..'))}, - \ 'whitelist': ['javascript', 'javascript.jsx', 'javascriptreact'] +autocmd User LspSetup call LspOptionsSet(#{ + \ autoComplete: v:true, + \ autoHighlightDiags: v:true, \ }) -endif -function! s:on_lsp_buffer_enabled() abort - setlocal omnifunc=lsp#complete - setlocal signcolumn=yes - if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif - nmap <buffer> gs <plug>(lsp-document-symbol-search) - nmap <buffer> gS <plug>(lsp-workspace-symbol-search) - nmap <buffer> gr <plug>(lsp-references) - nmap <buffer> gi <plug>(lsp-implementation) - nmap <buffer> gt <plug>(lsp-type-definition) - nmap <buffer> <leader>rn <plug>(lsp-rename) - nmap <buffer> [g <plug>(lsp-previous-diagnostic) - nmap <buffer> ]g <plug>(lsp-next-diagnostic) - nmap <buffer> K <plug>(lsp-hover) - nnoremap <buffer> <expr><c-f> lsp#scroll(+4) - nnoremap <buffer> <expr><c-d> lsp#scroll(-4) - let g:lsp_format_sync_timeout = 1000 - autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') - -endfunction +" one list instead of N copy-pasted if-executable/augroup blocks +autocmd User LspSetup call LspAddServer([ + \ #{name: 'pylsp', filetype: 'python', path: 'pylsp'}, + \ #{name: 'clangd', filetype: ['c', 'cpp', 'objc', 'objcpp'], + \ path: 'clangd', args: ['--background-index']}, + \ #{name: 'html', filetype: 'html', + \ path: 'vscode-html-language-server', args: ['--stdio']}, + \ #{name: 'css', filetype: ['css', 'scss', 'less'], + \ path: 'vscode-css-language-server', args: ['--stdio']}, + \ #{name: 'ts', filetype: ['javascript', 'javascript.jsx', 'javascriptreact'], + \ path: 'typescript-language-server', args: ['--stdio']}, + \ ]) -augroup lsp_install +" keymaps: explicit :Lsp* commands mapped by hand, buffer-local, same idea as +" your old on_lsp_buffer_enabled() but no separate function/augroup needed — +" this fires once per attached buffer via the plugin's own event +autocmd User LspAttached call s:lsp_keymaps() +function! s:lsp_keymaps() abort + nmap <buffer> gs :LspDocumentSymbol<CR> + nmap <buffer> gr :LspShowReferences<CR> + nmap <buffer> gi :LspGotoImpl<CR> + nmap <buffer> gt :LspGotoTypeDef<CR> + nmap <buffer> <leader>rn :LspRename<CR> + nmap <buffer> [g :LspDiagPrev<CR> + nmap <buffer> ]g :LspDiagNext<CR> + nmap <buffer> K :LspHover<CR> +if index(['python', 'c', 'cpp', 'objc', 'objcpp', + \ 'javascript', 'javascript.jsx', 'javascriptreact'], &filetype) >= 0 + autocmd BufWritePre <buffer> LspFormat +endif +endfunction +function! s:prettier_format() abort + if !executable('prettier') + return + endif + let l:view = winsaveview() + silent %!prettier --stdin-filepath % --html-whitespace-sensitivity=scrict + if v:shell_error + silent undo + echohl ErrorMsg | echom 'formatting failed' + endif + call winrestview(l:view) +endfunction +augroup prettierformat au! - " call s:on_lsp_buffer_enabled only for languages that has the server registered. - autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() + autocmd BufWritePre *.html,*.css call s:prettier_format() augroup END -autocmd User asyncomplete_setup call asyncomplete#register_source( - \ asyncomplete#sources#clang#get_source_options()) + + |
