--local lspconfig = require("lspconfig") local cmp_nvim_lsp = require("cmp_nvim_lsp") -- Setup capabilities for nvim-cmp completion local capabilities = cmp_nvim_lsp.default_capabilities() -- Common on_attach function to map keys after LSP attaches to buffer local on_attach = function(client, bufnr) local bufmap = function(mode, lhs, rhs) vim.api.nvim_buf_set_keymap(bufnr, mode, lhs, rhs, { noremap = true, silent = true }) end -- LSP-related keymaps bufmap("n", "gd", "lua vim.lsp.buf.definition()") bufmap("n", "K", "lua vim.lsp.buf.hover()") bufmap("n", "gi", "lua vim.lsp.buf.implementation()") bufmap("n", "rn", "lua vim.lsp.buf.rename()") bufmap("n", "ca", "lua vim.lsp.buf.code_action()") bufmap("n", "gr", "lua vim.lsp.buf.references()") bufmap("n", "f", "lua vim.lsp.buf.format()") end -- List of servers to setup local servers = { "pyright", "clangd", "zls", "lua_ls", "vimls", "marksman", "texlab", } local server_overrides = { clangd = { cmd = { "clangd", "--clang-tidy" }, }, } for _, server in ipairs(servers) do vim.lsp.config(server, vim.tbl_deep_extend("force", { on_attach = on_attach, capabilities = capabilities, }, server_overrides[server] or {})) -- Enable the server configuration vim.lsp.enable(server) end