local cmp = require("cmp") local luasnip = require("luasnip") local cmp_kinds = { 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 = " ", } cmp.setup({ formatting = { format = function(_, vim_item) vim_item.kind = (cmp_kinds[vim_item.kind] or "") .. vim_item.kind return vim_item end, }, mapping = { [""] = cmp.mapping.select_prev_item(), [""] = cmp.mapping.select_next_item(), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping(function(_) return vim.fn.pumvisible() == 1 and cmp.close() or cmp.complete() end), [""] = cmp.mapping.close(), [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true, }), [""] = function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") else fallback() end end, [""] = function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") else fallback() end end, }, sources = cmp.config.sources({ { name = "luasnip", max_item_count = 5 }, { name = "nvim_lsp", max_item_count = 5 }, { name = "path", max_item_count = 10 }, { name = "buffer", max_item_count = 10 }, }), snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, })