return { 'hrsh7th/nvim-cmp', dependencies = { 'neovim/nvim-lspconfig', 'L3MON4D3/LuaSnip', 'hrsh7th/cmp-nvim-lsp', 'hrsh7th/cmp-path', 'hrsh7th/cmp-buffer', 'hrsh7th/cmp-cmdline', 'hrsh7th/nvim-cmp', 'saadparwaiz1/cmp_luasnip', 'hrsh7th/cmp-nvim-lsp-signature-help', 'f3fora/cmp-spell', }, config = function () local cmp_status_ok, cmp = pcall(require, 'cmp') if not cmp_status_ok then return end local luasnip_status_ok, luasnip = pcall(require, 'luasnip') if not luasnip_status_ok then return end --cmp.setup { -- Load snippet support --snippet = { -- expand = function(args) -- luasnip.lsp_expand(args.body) -- }, -- Completion settings completion = { --completeopt = 'menu,menuone,noselect' keyword_length = 2 } -- Key mapping mapping = { [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [""] = cmp.mapping({ i = cmp.mapping.abort(), c = cmp.mapping.close(), }), [""] = cmp.config.disable, [''] = cmp.mapping.confirm { select = false, }, -- Tab mapping [''] = function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_jumpable() then luasnip.expand_or_jump() else fallback() end end, [''] = function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) else fallback() end end } -- Load sources, see: https://github.com/topics/nvim-cmp sources = { { name = 'nvim-lsp' }, { name = 'luasnip' }, { name = 'path' }, { name = 'buffer' }, { name = 'zsh' }, } end }