return { "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")() local auto_select = true return { auto_brackets = {}, -- configure any filetype to auto add brackets completion = { completeopt = "menu,menuone,noinsert" .. (auto_select and "" or ",noselect"), }, preselect = auto_select and cmp.PreselectMode.Item or cmp.PreselectMode.None, mapping = cmp.mapping.preset.insert({ [""] = LazyVim.cmp.confirm({ select = true }), }), sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "path" }, }, { { name = "buffer" }, }), formatting = { format = function(entry, item) local icons = LazyVim.config.icons.kinds if icons[item.kind] then item.kind = icons[item.kind] .. item.kind end local widths = { abbr = vim.g.cmp_widths and vim.g.cmp_widths.abbr or 40, menu = vim.g.cmp_widths and vim.g.cmp_widths.menu or 30, } for key, width in pairs(widths) do if item[key] and vim.fn.strdisplaywidth(item[key]) > width then item[key] = vim.fn.strcharpart(item[key], 0, width - 1) .. "…" end end return item end, }, sorting = defaults.sorting, } end, }