return function() -- Setup git completion source require("cmp_git").setup() -- Set completeopt to have a better completion experience vim.o.completeopt = 'menuone,noselect' -- luasnip setup local luasnip = require 'luasnip' -- nvim-cmp setup local cmp = require 'cmp' if not cmp then return end cmp.setup { snippet = {expand = function(args) luasnip.lsp_expand(args.body) end}, mapping = { [''] = cmp.mapping.select_prev_item(), [''] = cmp.mapping.select_next_item(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), [''] = cmp.mapping.close(), [''] = cmp.mapping.confirm { behavior = cmp.ConfirmBehavior.Replace, select = true }, [''] = 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 }, sources = { {name = 'buffer'}, {name = 'git'}, {name = 'luasnip'}, {name = 'nvim_lsp'}, {name = 'nvim_lua'}, {name = 'path'} } } -- Enable autopairs when enter is processed -- on completion local cmp_autopairs = require 'nvim-autopairs.completion.cmp' cmp.event:on('confirm_done', cmp_autopairs.on_confirm_done()) -- load friendly-snippets to luasnip require('luasnip/loaders/from_vscode').lazy_load() -- Register snippet parameter navigation keybindings local mappings = { [''] = {luasnip.jump(1)}, [''] = {luasnip.jump(-1)} } local wk = require('which-key') wk.register(mappings, {mode = "n"}) wk.register(mappings, {mode = "s"}) end