summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZofia Szweda <sophies@disroot.org>2026-09-06 21:28:44 +0200
committerZofia Szweda <sophies@disroot.org>2026-09-06 21:29:12 +0200
commitf49cc851707cb0966f6fe2892c360e2ab7ba9b32 (patch)
treeb3e9c6d847822aa135ba158fed382ee75f50525a
parentd9e5e1d50636db66ed9a63d74297c5c2926e280d (diff)
vim: move from asyncomplete+vim-lsp to a more minimal, batteries-included LSP plugin.
-rw-r--r--vim/.vimrc127
1 files changed, 52 insertions, 75 deletions
diff --git a/vim/.vimrc b/vim/.vimrc
index 0092bda..c4568db 100644
--- a/vim/.vimrc
+++ b/vim/.vimrc
@@ -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())
+
+