vim.opt.completeopt = { "menu", "menuone", "popup" } local cmp = require("cmp") cmp.setup({ -- snippet setup configuration snippet = { expand = function(args) vim.fn["UltiSnips#Anon"](args.body) end, }, -- Window/Menu view = { entries = "custom" }, window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, -- Add ghost text because it's fancy experimental = { ghost_text = {}, }, -- mapping mapping = cmp.mapping.preset.insert({ -- Shift+TAB to go to the Previous Suggested item [""] = cmp.mapping.select_prev_item(), -- Tab to go to the next suggestion [""] = cmp.mapping.select_next_item(), -- CTRL+SHIFT+f to scroll backwards in description [""] = cmp.mapping.scroll_docs(-4), -- CTRL+F to scroll forwards in the description [""] = cmp.mapping.scroll_docs(4), -- CTRL+SPACE to bring up completion at current Cursor location [""] = cmp.mapping.complete(), -- CTRL+e to exit suggestion and close it [""] = cmp.mapping.close(), -- TODO: Search better option -- CR (enter or return) to CONFIRM the currently selection suggestion -- We set the ConfirmBehavior to insert the Selected suggestion [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, }), }), -- sources sources = cmp.config.sources({ { name = "path" }, { name = "ultisnips", keyword_length = 1 }, { name = "calc" }, { name = "lua-latex-symbols", option = { cache = true } }, { name = "buffer", keyword_length = 3 }, { name = "nvim_lsp", keyword_length = 2}, }), -- formatting formatting = { fields = { "menu", "abbr", "kind" }, format = function (entry, item) local menu_icon = { path = "𝦶", ultisnips = "✂", calc = "Σ", lualatexsymbols = "󰿈", buffer = "󰘝", nvim_lsp = "⌨" } item.menu = menu_icon[entry.source.name] return item end, }, }) cmp.setup.cmdline({ "/", "?" }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = "buffer" }, { name = "fuzzy_path", keyword_length = 4 }, }, formatting = { fields = { "menu", "abbr", "kind" }, format = function(entry, item) local menu_icon = { buffer = "󰱼", fuzzy_path = "", } item.menu = menu_icon[entry.source.name] return item end, }, }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(":", { view = { entries = { name = 'wildmenu', separator = "|" } }, mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "path" }, { name = "cmdline_history", keyword_length = 24 }, }, { { name = "cmdline", keyword_length = 1 }, }), formatting = { fields = { "menu", "abbr", "kind" }, format = function(entry, item) local menu_icon = { path = "󰙅", cmdline = "", cmdline_history = "󰂺 ", } item.menu = menu_icon[entry.source.name] return item end, }, })