" https://github.com/neovim/nvim-lspconfig を参考にした " dictionaryを宣言 let g:LSP_commands = {} " それぞれの言語を追加 " 例えば、C/C++: if executable('clangd') let g:LSP_commands['c'] = 'clangd' let g:LSP_commands['cpp'] = 'clangd' endif " Rust if executable('rust-analyzer') let g:LSP_commands['rust'] = 'rust_analyzer' endif " Python if executable('pyls') let g:LSP_commands['python'] = 'pyls' endif if executable('pyright') let g:LSP_commands['python'] = 'pyright' endif " Vim Script if executable('vim-language-server') let g:LSP_commands['vim'] = 'vimls' endif " latex if executable('texlab') let g:LSP_commands['tex'] = 'texlab' endif " js/ts if executable('deno') let g:LSP_commands['typescript'] = 'denols' let g:LSP_commands['javascript'] = 'denols' endif " 追加したそれぞれの言語についてLSP設定を起動 for [key, val] in items(g:LSP_commands) exe 'lua require''lspconfig''.' . val . '.setup{}' endfor " https://github.com/neovim/nvim-lspconfig そのまま function! LC_maps() if has_key(g:LSP_commands, &filetype) nnoremap K lua vim.lsp.buf.hover() nnoremap gD lua vim.lsp.buf.declaration() nnoremap gd lua vim.lsp.buf.definition() nnoremap lua vim.lsp.buf.definition() inoremap lua vim.lsp.buf.signature_help() nnoremap 1gD lua vim.lsp.buf.type_definition() nnoremap gr lua vim.lsp.buf.rename() nnoremap gR lua vim.lsp.buf.references() nnoremap g0 lua vim.lsp.buf.document_symbol() nnoremap gW lua vim.lsp.buf.workspace_symbol() nnoremap gi lua vim.lsp.buf.implementation() nnoremap gr lua vim.lsp.buf.rename() nnoremap ge lua vim.lsp.diagnostic.show_line_diagnostics() nnoremap [d lua vim.lsp.diagnostic.goto_prev() nnoremap ]d lua vim.lsp.diagnostic.goto_next() nnoremap Q lua vim.lsp.diagnostic.set_loclist() nnoremap gF lua vim.lsp.buf.formatting_sync(nil, 10000) endif endfunction autocmd BufEnter * call LC_maps() " 特定のファイルの時、保存時に整形する augroup lspAutoFormat autocmd! autocmd BufWritePre *.rs,*.c,*.cpp, lua vim.lsp.buf.formatting_sync(nil, 1000) augroup END