return { { "hrsh7th/nvim-cmp", opts = function() vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) local cmp = require("cmp") local defaults = require("cmp.config.default")() return { window = { completion = { border = "rounded", scrollbar = false, winhighlight = "Normal:CmpPmenu,FloatBorder:CmpPmenu,Search:None" }, documentation = { border = "rounded", scrollbar = false, winhighlight = "Normal:CmpPmenu,FloatBorder:CmpPmenu,Search:None" }, }, completion = { completeopt = "menu,menuone,noinsert", }, snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), [""] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.complete(), [""] = cmp.mapping.abort(), [""] = cmp.mapping.confirm({ select = true }), [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true, }), [""] = function(fallback) cmp.abort() fallback() end, }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = 'nvim_lsp_signature_help' }, { name = "luasnip" }, { name = "path" }, }, { { name = "buffer" }, }), formatting = { fields = { "kind", "abbr", "menu" }, format = function(_, item) item.menu = item.kind local icons = require("lazyvim.config").icons.kinds if icons[item.kind] then item.kind = icons[item.kind] end return item end, }, experimental = { ghost_text = { hl_group = "CmpGhostText", } }, sorting = defaults.sorting, } end, dependencies = { "hrsh7th/cmp-nvim-lsp", "hrsh7th/cmp-buffer", "hrsh7th/cmp-path", "hrsh7th/cmp-path", "hrsh7th/cmp-nvim-lsp-signature-help", "saadparwaiz1/cmp_luasnip", } } }