local lsp = require("lsp-zero") lsp.preset("recommended") require('mason').setup({}) require('mason-lspconfig').setup({ ensure_installed = { 'tsserver', 'rust_analyzer' }, handlers = { lsp.default_setup, lua_ls = function() local lua_opts = lsp.nvim_lua_ls() require('lspconfig').lua_ls.setup(lua_opts) end } }) require('lspconfig').yamlls.setup({ on_attach = function(client, bufnr) client.resolved_capabilities.document_formatting = true end, settings = { yaml = { customTags = { "!enemy", "!delay", "!composite" }, validate = false, format = { enable = true } } } }) require('lspconfig').tsserver.setup { settings = { typescript = { preferences = { quoteStype = 'single' } }, javascript = { preferences = { quoteStyle = 'single' } } } } local cmp = require('cmp') local cmp_select = { behavior = cmp.SelectBehavior.Select } local cmp_mappings = lsp.defaults.cmp_mappings({ }) cmp_mappings[''] = nil cmp_mappings[''] = nil local lspkind = require('lspkind') cmp.setup({ sources = { { name = 'path' }, { name = 'nvim_lsp' }, { name = 'lsp-zero' }, { name = 'nvim_lua' }, { name = 'luasnip', keyword_length = 2 }, { name = 'buffer', keyword_length = 3 }, }, view = { entries = 'native', }, completion = { completeopt = 'menu,menuone,noinsert' }, window = { documentation = cmp.config.window.bordered() }, formatting = { format = lspkind.cmp_format({ mode = 'symbol_text', menu = ({ buffer = '[Buffer]', nvim_lsp = '[LSP]', nvim_lua = '[Lua]', luasnip = '[LuaSnip]' }) }) }, 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(), [''] = nil, [''] = nil }), }) lsp.set_preferences({ suggest_lsp_servers = true, sign_icons = { error = 'E', warn = 'W', hint = 'H', info = 'I' } }) lsp.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) lsp.setup() vim.diagnostic.config({ virtual_text = true })