let g:lsp_settings = json_decode(join(readfile(g:config_home \ .. '/dein/settings/vim-lsp-settings.json' \ ))) let g:lsp_diagnostics_echo_cursor = v:true let g:lsp_fold_enabled = v:false let g:lsp_document_code_action_signs_enabled = v:false let g:lsp_diagnostics_highlights_insert_mode_enabled = v:false let g:lsp_diagnostics_signs_insert_mode_enabled = v:false let g:lsp_document_highlight_enabled = v:false let g:lsp_diagnostics_signs_error = {'text': '✗'} let g:lsp_diagnostics_signs_warning = {'text': '‼'} let g:lsp_diagnostics_signs_hint = {'text': 'i'} let g:lsp_log_file = g:data_home .. '/vim-lsp.log' let g:lsp_settings_servers_dir = g:data_home .. '/vim-lsp-settings/servers' let g:lsp_settings_filetype_python = 'pyls-all' let g:lsp_settings_filetype_typescript = 'deno' let g:lsp_settings_filetype_typescriptreact = 'deno' let g:lsp_settings_filetype_markdown = 'efm-langserver' let g:lsp_settings_filetype_json = ['json-languageserver', 'efm-langserver'] let g:lsp_settings_filetype_sh = 'efm-langserver' let g:lsp_settings_filetype_yaml = 'yaml-language-server' " NOTE: no binary for linux-arm64 " let g:lsp_settings_filetype_lua = 'sumneko-lua-language-server' function! s:on_lsp_buffer_enabled() abort setlocal omnifunc=lsp#complete setlocal tagfunc=lsp#tagfunc setlocal signcolumn=number if index(['vim', 'yaml', 'markdown', 'sh', 'json'], &filetype) == -1 nmap K (lsp-hover) endif nmap gr (lsp-rename) nmap gd (lsp-definition) nmap gq (lsp-document-format) xmap gq (lsp-document-range-format) nmap gn (lsp-next-diagnostic) nmap gp (lsp-previous-diagnostic) endfunction function! s:install_deno_lsp() abort let deno_dir = g:lsp_settings_servers_dir .. '/deno' if &filetype !~# 'typescript' || filereadable(deno_dir .. '/loaded_deno') return endif let deno = exepath('deno') if deno !=# '' call system(printf('ln -snf %s %s/deno', deno, deno_dir)) silent! call writefile([''], deno_dir .. '/loaded_deno') endif endfunction function! s:install_pyls_ext() abort let pyls_dir = g:lsp_settings_servers_dir .. '/pyls-all' if &filetype !=# 'python' || filereadable(pyls_dir .. '/loaded_pyls_ext') return endif let pip = pyls_dir .. '/venv/bin/pip' let pyls_ext = ['pyls-mypy', 'pyls-isort', 'pyls-black'] if executable(pip) call term_start(extend([pip, 'install'], pyls_ext), { \ 'cwd': fnamemodify(pip, ':h:h:h'), \ 'term_name': 'install_pyls_ext'}) silent! call writefile([''], pyls_dir .. '/loaded_pyls_ext') endif endfunction autocmd user BufWritePre *.json LspDocumentFormatSync --server=efm-langserver autocmd user User lsp_buffer_enabled \ call on_lsp_buffer_enabled() autocmd user User lsp_setup \ : call install_pyls_ext() \ | call install_deno_lsp()