dotfiles/home/.config/nvim/lua/plugins/cmp.lua

70 lines
2.2 KiB
Lua

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 = {
['<C-p>'] = cmp.mapping.select_prev_item(),
['<C-n>'] = cmp.mapping.select_next_item(),
['<C-d>'] = cmp.mapping.scroll_docs(-4),
['<C-f>'] = cmp.mapping.scroll_docs(4),
['<C-Space>'] = cmp.mapping.complete(),
['<C-e>'] = cmp.mapping.close(),
['<CR>'] = cmp.mapping.confirm {
behavior = cmp.ConfirmBehavior.Replace,
select = true
},
['<Tab>'] = function(fallback)
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end,
['<S-Tab>'] = 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 = {
['<c-j>'] = {luasnip.jump(1)},
['<c-k>'] = {luasnip.jump(-1)}
}
local wk = require('which-key')
wk.register(mappings, {mode = "n"})
wk.register(mappings, {mode = "s"})
end