local lsp = require("lsp-zero") lsp.preset("recommended") lsp.ensure_installed({ 'tsserver', 'eslint', 'sumneko_lua', 'rust_analyzer', }) -- Fix Undefined global 'vim' lsp.configure('sumneko_lua', { settings = { Lua = { diagnostics = { globals = { 'vim' } } } } }) local cmp = require('cmp') cmp.setup({ window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), } }) local cmp_select = {behavior = cmp.SelectBehavior.Select} local cmp_mappings = lsp.defaults.cmp_mappings({ [''] = cmp.mapping.select_prev_item(cmp_select), [''] = cmp.mapping.select_next_item(cmp_select), [''] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.complete(), }) -- disable completion with tab -- this helps with copilot setup cmp_mappings[''] = nil cmp_mappings[''] = nil lsp.setup_nvim_cmp({ mapping = cmp_mappings }) lsp.set_preferences({ suggest_lsp_servers = false, sign_icons = { error = 'E', warn = 'W', hint = 'H', info = 'I' } }) lsp.on_attach(function(client, bufnr) local opts = {buffer = bufnr, remap = false} if client.name == "eslint" then vim.cmd.LspStop('eslint') return end vim.keymap.set("n", "gd", vim.lsp.buf.definition, opts) vim.keymap.set("n", "K", vim.lsp.buf.hover, opts) vim.keymap.set("n", "vws", vim.lsp.buf.workspace_symbol, opts) vim.keymap.set("n", "vd", vim.diagnostic.open_float, opts) vim.keymap.set("n", "[d", vim.diagnostic.goto_next, opts) vim.keymap.set("n", "]d", vim.diagnostic.goto_prev, opts) vim.keymap.set("n", "vca", vim.lsp.buf.code_action, opts) vim.keymap.set("n", "vrr", vim.lsp.buf.references, opts) vim.keymap.set("n", "vrn", vim.lsp.buf.rename, opts) vim.keymap.set("i", "", vim.lsp.buf.signature_help, opts) end) -- function that is used with keybinding cm to toggle autocompletion Mode = require('cmp.types').cmp.TriggerEvent.TextChanged function SetAutoCmp(mode) if mode then cmp.setup({ completion = { autocomplete = { Mode } } }) Mode = false else cmp.setup({ completion = { autocomplete = Mode } }) Mode = require('cmp.types').cmp.TriggerEvent.TextChanged end end SetAutoCmp(Mode) lsp.setup() vim.diagnostic.config({ virtual_text = true, })