local cmp = require("cmp") local compare = cmp.config.compare local luasnip = require("luasnip") local kind_icons = { Text = "", Method = "", Function = "", Constructor = "", Field = "", Variable = "", Class = "ﴯ", Interface = "", Module = "", Property = "ﰠ", Unit = "", Value = "", Enum = "", Keyword = "", Snippet = "", Color = "", File = "", Reference = "", Folder = "", EnumMember = "", Constant = "", Struct = "", Event = "", Operator = "", TypeParameter = "", } -- Load Snippets require("luasnip.loaders.from_vscode").load() cmp.setup({ formatting = { format = function(entry, vim_item) -- Kind icons vim_item.kind = string.format("%s %s", kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind -- Source vim_item.menu = ({ fuzzy_buffer = "[Buffer]", nvim_lsp = "[Lsp]", luasnip = "[LuaSnip]", nvim_lua = "[Lua]", path = "[Path]", calc = "[Calculator]", neorg = "[Neorg]", emoji = "[Emoji]", zsh = "[Zsh]", crates = "[Crates]", cmdline_history = "[Cmd History]", rg = "[Ripgrep]", npm = "[Npm],", })[entry.source.name] return vim_item end, }, window = { documentation = { border = { "╭", "─", "╮", "│", "╯", "─", "╰", "│" }, }, }, experimental = { ghost_text = true, native_menu = false, }, snippet = { -- REQUIRED - you must specify a snippet engine expand = function(args) require("luasnip").lsp_expand(args.body) -- For `luasnip` users. end, }, mapping = { [""] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }), [""] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }), [""] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }), [""] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `` mapping. [""] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close(), }), [""] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. [""] = cmp.mapping(function(fallback) if luasnip.jumpable() then luasnip.jump(1) elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end, { "i", "s" }), }, sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "nvim_lua" }, { name = "path" }, { name = "emoji" }, { name = "neorg" }, { name = "luasnip" }, -- For luasnip users. { name = "calc" }, { name = "zsh" }, { name = "fuzzy_buffer" }, { name = "rg" }, { name = "npm", keyword_length = 2 }, { name = "dictionary", keyword_length = 2, }, }), sorting = { priority_weight = 2, comparators = { compare.score, compare.recently_used, compare.exact, require("cmp_fuzzy_buffer.compare"), compare.offset, compare.kind, compare.sort_text, compare.length, compare.order, }, }, }) -- Git Commit Completions cmp.setup.filetype("gitcommit", { sources = cmp.config.sources({ { name = "conventionalcommits" }, { name = "buffer" }, }), }) cmp.setup.filetype("toml", { sources = cmp.config.sources({ { name = "crates" }, }), }) -- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline("/", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ -- { name = "buffer" }, { name = "fuzzy_buffer" }, { name = "cmdline_history" }, }), }) cmp.setup.cmdline("?", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "fuzzy_buffer" }, { name = "cmdline_history" }, }), }) cmp.setup.cmdline("@", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "fuzzy_buffer" }, { name = "cmdline_history" }, }), }) -- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore). cmp.setup.cmdline(":", { mapping = cmp.mapping.preset.cmdline(), sources = cmp.config.sources({ { name = "path" }, { name = "cmdline" }, { name = "cmdline_history" }, }), })