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() cmp.setup { completion = { completeopt = 'menu,menuone,preview,noselect', }, snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert { [''] = cmp.mapping.select_prev_item(), -- previous suggestion [''] = cmp.mapping.select_next_item(), -- next suggestion [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), -- show completion suggestions [''] = cmp.mapping.abort(), -- close completion window [''] = cmp.mapping.confirm { select = false }, -- Tab to complete [''] = cmp.mapping(function(fallback) if cmp.visible() then cmp.confirm { select = true } -- confirm selection elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() 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 }, -- configure lspkind for vs-code like pictograms in completion menu formatting = { format = lspkind.cmp_format { mode = 'symbol_text', -- show symbol text with icons maxwidth = 50, ellipsis_char = '...', }, }, -- Enable rounded borders window = { completion = cmp.config.window.bordered(), documentation = cmp.config.window.bordered(), }, } end, }