Files
nvim/lua/config/nvim-cmp.lua

70 lines
1.6 KiB
Lua

--- Ensure plugins are installed
local ok, cmp, luasnip, luasnip_from_vscode, lspkind, cmp_autopairs = pcall(function()
return require("cmp"),
require("luasnip"),
require("luasnip.loaders.from_vscode"),
require("lspkind"),
require("nvim-autopairs.completion.cmp")
end)
if not ok then
return
end
--- loads vscode style snippets from installed plugins (e.g. friendly-snippets)
luasnip_from_vscode.lazy_load()
--- Plugin options
local opts = {
completion = {
completeopt = "menu,menuone,preview,noselect",
},
snippet = { -- configure how nvim-cmp interacts with snippet engine
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
mapping = cmp.mapping.preset.insert({
["<C-Space>"] = cmp.mapping.complete(), -- show completion suggestions
["<C-e>"] = cmp.mapping.abort(), -- close completion window
["<CR>"] = cmp.mapping.confirm({ select = false }),
}),
-- sources for autocompletion
sources = cmp.config.sources({
{ name = "nvim_lsp" },
{ name = "luasnip" }, -- snippets
{ name = "path" }, -- file system paths
{ name = "buffer" }, -- text within current buffer
}),
-- configure lspkind for vs-code like pictograms in completion menu
formatting = {
format = lspkind.cmp_format({
maxwidth = 50,
ellipsis_char = "...",
}),
},
}
--- Load plugin
cmp.setup(opts)
--- Add autopairs
cmp.event:on(
"confirm_done",
cmp_autopairs.on_confirm_done({
filetypes = {
-- "*" is a alias to all filetypes
["*"] = {
["("] = {
kind = {
cmp.lsp.CompletionItemKind.Function,
cmp.lsp.CompletionItemKind.Method,
},
},
},
sh = false,
},
})
)