return { 'hrsh7th/nvim-cmp', event = 'InsertEnter', dependencies = { 'hrsh7th/cmp-buffer', -- source for text in buffer 'hrsh7th/cmp-path', -- source for file system paths { 'L3MON4D3/LuaSnip', -- follow latest release. version = 'v2.*', -- Replace by the latest released major (first number of latest release) -- install jsregexp (optional!). build = 'make install_jsregexp', }, 'saadparwaiz1/cmp_luasnip', -- for autocompletion 'rafamadriz/friendly-snippets', -- useful snippets 'onsails/lspkind.nvim', -- vs-code like pictograms }, config = function() local cmp = require 'cmp' local luasnip = require 'luasnip' local lspkind = require 'lspkind' -- loads vscode style snippets from installed plugins (e.g. friendly-snippets) require('luasnip.loaders.from_vscode').lazy_load {} -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file for _, ft_path in ipairs(vim.api.nvim_get_runtime_file('mysnippets/*.lua', true)) do loadfile(ft_path)() end cmp.setup { preselect = cmp.PreselectMode.None, completion = { completeopt = 'menu,menuone,noinsert,noselect', }, experimental = { ghost_text = true }, snippet = { -- configure how nvim-cmp interacts with snippet engine expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert { [''] = cmp.mapping.abort(), -- close completion window [''] = cmp.mapping.confirm { select = true }, [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.select_prev_item(), -- [''] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select }, -- [''] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select }, -- Scroll the documentation window [b]ack / [f]orward [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping(function(fallback) if luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() elseif cmp.visible() then cmp.confirm { select = true } else cmp.complete() end end, { 'i', 's' }), [''] = cmp.mapping.complete {}, [''] = cmp.mapping(function() if luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() end end, { 'i', 's' }), [''] = cmp.mapping(function() if luasnip.locally_jumpable(-1) then luasnip.jump(-1) end end, { 'i', 's' }), }, -- sources for autocompletion sources = cmp.config.sources { { name = 'nvim_lsp' }, { name = 'luasnip' }, -- snippets { name = 'buffer' }, -- text within current buffer { name = 'path' }, -- file system paths }, -- sorting = { -- comparators = { -- cmp.config.compare.score, -- cmp.config.compare.recently_used, -- }, -- }, -- configure lspkind for vs-code like pictograms in completion menu formatting = { expandable_indicator = true, fields = { cmp.ItemField.Abbr, cmp.ItemField.Kind }, format = lspkind.cmp_format { maxwidth = 50, ellipsis_char = '...', }, }, } end, }