return { "hrsh7th/nvim-cmp", event = "InsertEnter", dependencies = { -- Completion sources "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-cmdline", "saadparwaiz1/cmp_luasnip", -- Snippet engine "L3MON4D3/LuaSnip", -- Optional: VSCode-style icons "onsails/lspkind.nvim", }, config = function() local cmp = require("cmp") local luasnip = require("luasnip") local lspkind = require("lspkind") cmp.setup({ snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.close(), [""] = cmp.mapping.complete(), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, { name = "path" }, { name = "buffer" }, }), formatting = { format = lspkind.cmp_format({ mode = "symbol_text", -- "text", "symbol", or "symbol_text" maxwidth = 50, ellipsis_char = "...", }), }, }) -- Cmdline completion (optional) cmp.setup.cmdline("/", { mapping = cmp.mapping.preset.cmdline(), sources = { { name = "buffer" } } }) cmp.setup.cmdline(":", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "path" } }, { { name = "cmdline" } }) }) end, }