local lsp_zero = require("lsp-zero") local wk = require("which-key") wk.register({ ["gd"] = { "Go to definitions" }, ["K"] = { "Show info" }, ["vws"] = { "View workspace symbol"}, ["vd"] = { "View diagnostics"}, ["vca"] = { "View code action"}, ["vrr"] = { "View references"}, ["vrn"] = { "Rename symbol"}, ["[d"] = { "Go to next diagnotics"}, ["]d"] = { "Go to previous diagnotics"} }, { mode = "n", silent = true, noremap = true, }) wk.register({ [""] = { "Signature help"} }, { mode = "i", silent = true, noremap = true, }) lsp_zero.on_attach(function(client, bufnr) local opts = {buffer = bufnr, remap = false} vim.keymap.set("n", "gd", function() vim.lsp.buf.definition() end, opts) vim.keymap.set("n", "K", function() vim.lsp.buf.hover() end, opts) vim.keymap.set("n", "vws", function() vim.lsp.buf.workspace_symbol() end, opts) vim.keymap.set("n", "vd", function() vim.diagnostic.open_float() end, opts) vim.keymap.set("n", "[d", function() vim.diagnostic.goto_next() end, opts) vim.keymap.set("n", "]d", function() vim.diagnostic.goto_prev() end, opts) vim.keymap.set("n", "vca", function() vim.lsp.buf.code_action() end, opts) vim.keymap.set("n", "vrr", function() vim.lsp.buf.references() end, opts) vim.keymap.set("n", "vrn", function() vim.lsp.buf.rename() end, opts) vim.keymap.set("i", "", function() vim.lsp.buf.signature_help() end, opts) end) require("mason").setup({}) require("mason-lspconfig").setup({ ensure_installed = { "tsserver", "rust_analyzer", "jedi_language_server", "clangd" }, handlers = { lsp_zero.default_setup, lua_ls = function() local lua_opts = lsp_zero.nvim_lua_ls() require("lspconfig").lua_ls.setup(lua_opts) end, } }) local cmp = require("cmp") local cmp_select = {behavior = cmp.SelectBehavior.Select} cmp.setup({ sources = { {name = "path"}, {name = "nvim_lsp"}, {name = "nvim_lua"}, {name = "luasnip"} }, formatting = lsp_zero.cmp_format(), mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.select_prev_item(cmp_select), [""] = cmp.mapping.select_next_item(cmp_select), [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }), snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, })