local cmp = require("cmp") local lspkind = require "lspkind" require("custom.snippets") cmp.setup({ preselect = cmp.PreselectMode.None, completion = { completeopt = "menu,menuone,noinsert", }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), [""] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [""] = cmp.mapping.abort(), [''] = function() if cmp.visible_docs() then cmp.close_docs() else cmp.open_docs() end end, [""] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, }, { "i", "c" }), }), -- Enable luasnip to handle snippet expansion for nvim-cmp snippet = { expand = function(args) vim.snippet.expand(args.body) end, }, sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "path" }, { name = "luasnip" }, { name = "buffer", group_index = 10 }, { name = "lazydev", group_index = 0, } }), formatting = { expandable_indicator = true, fields = { "kind", "abbr", "menu" }, format = lspkind.cmp_format({ mode = 'symbol_text', maxwidth = 50, ellipsis_char = '...', show_labelDetails = true, before = function(entry, vim_item) vim_item.menu = ({ buffer = "[Buffer]", nvim_lsp = "[LSP]", luasnip = "[Snippet]", path = "[Path]", lazydev = "[Lazy]", })[entry.source.name] return vim_item end }) } })