local lspconf = require("lspconfig") local cmp = require("cmp") local capabilities = require("cmp_nvim_lsp").default_capabilities() vim.opt.signcolumn = "yes" local servers = { ["lua_ls"] = { settings = { Lua = { runtime = { version = "LuaJIT" } } } }, ["clangd"] = {}, } for lsp, conf in pairs(servers) do conf.capabilities = capabilities lspconf[lsp].setup(conf) end cmp.setup({ preselect = "item", completion = { completeopt = "menu,menuone,noinsert", }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, formatting = { fields = { "menu", "abbr", "kind" }, format = function(entry, item) local menu_icon = { nvim_lsp = "L", buffer = "B", path = "P", nvim_lua = "NL", } item.menu = menu_icon[entry.source.name] return item end, }, mapping = { [""] = cmp.mapping.confirm({ select = false }), [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.select_prev_item(), }, sources = { { name = "path" }, { name = "nvim_lsp" }, { name = "buffer", keyword_length = 3 }, }, }) vim.api.nvim_create_autocmd("LspAttach", { group = vim.api.nvim_create_augroup("UserLspConfig", {}), callback = function(ev) vim.bo[ev.buf].omnifunc = "v:lua.vim.lsp.omnifunc" local opts = { buffer = ev.buf } vim.keymap.set("n", "gD", vim.lsp.buf.declaration, opts) vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "gi", vim.lsp.buf.implementation, opts) vim.keymap.set("n", "gr", vim.lsp.buf.references, opts) vim.keymap.set("n", "go", vim.lsp.buf.type_definition, opts) vim.keymap.set("n", "ls", vim.lsp.buf.signature_help, opts) vim.keymap.set("n", "rn", vim.lsp.buf.rename, opts) vim.keymap.set("n", "h", vim.lsp.buf.hover, opts) vim.keymap.set({"n", "v"}, "ca", vim.lsp.buf.code_action, opts) vim.keymap.set("n", "f", function() vim.lsp.buf.format({async = true}) end, opts) end })