vim.opt.completeopt = 'menu,menuone,noselect' -- make 'kind' readable with dichromatic colorscheme vim.cmd('highlight! CmpItemKindDefault guibg=NONE guifg=#000000') local cmp = require('cmp') cmp.setup({ snippet = { expand = function(args) require('luasnip').lsp_expand(args.body) end, }, formatting = { format = function(entry, vim_item) vim_item.menu = ({ buffer = '[Buffer]', luasnip = '[Snippet]', })[entry.source.name] return vim_item end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. }), sources = cmp.config.sources({ { name = 'nvim_lsp', keyword_length = 3 }, { name = 'luasnip', keyword_length = 2 }, }, { { name = 'buffer', keyword_length = 3 }, }) }) -- configure completion for specific filetype cmp.setup.filetype('gitcommit', { sources = cmp.config.sources({ { name = 'buffer' }, }), }) -- use buffer source for `/` and `?` (if you enabled `native_menu`, this won't -- work anymore) cmp.setup.cmdline({ '/', '?' }, { mapping = cmp.mapping.preset.cmdline(), sources = { { name = 'buffer' } }, }) -- 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' } }), })