return { { 'hrsh7th/nvim-cmp', dependencies = { -- extra completion plugins 'hrsh7th/cmp-cmdline', 'hrsh7th/cmp-path', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-calc', 'hrsh7th/cmp-emoji', 'kdheepak/cmp-latex-symbols', -- snippets 'hrsh7th/cmp-vsnip', 'hrsh7th/vim-vsnip', 'onsails/lspkind.nvim' }, config = function(_, _) local cmp = require("cmp"); cmp.setup({ window = { completion = { border = "single", scrollbar = false, winhighlight = "Normal:CmpPmenu,FloatBorder:FloatBorder,Search:None" }, documentation = { border = "single", scrollbar = false, winhighlight = "Normal:CmpPmenu,FloatBorder:FloatBorder,Search:None" }, }, snippet = { expand = function(args) vim.fn["vsnip#anonymous"](args.body) end, }, completion = { preselect = 'none', completeopt = "menu,menuone,noinser,noselectt", }, sources = cmp.config.sources({ { name = 'nvim_lsp' }, { name = 'nvim_lsp_signature_help' }, { name = 'vsnip' }, { name = 'buffer' }, { name = "path" }, { name = 'calc' }, }, { { name = 'emoji' }, { name = "cmdline" }, { name = "latex_symbols" } }), mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [""] = cmp.mapping({ i = function(fallback) if cmp.visible() and cmp.get_active_entry() then cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }) else fallback() end end, s = cmp.mapping.confirm({ select = true }), c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }), }), }), formatting = { fields = { "abbr", "kind", "menu" }, format = function(entry, item) return require("lspkind").cmp_format()(entry, item) end }, experimental = { ghost_text = { hl_group = "NonText", }, }, }) end } }