local cmp = require("cmp") local types = require('cmp.types') 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,noinsert", autocomplete = { types.cmp.TriggerEvent.TextChanged }, }, window = { documentation = { border = { '┌', '─', '┐', '│', '┘', '─', '└', '│' }, winhighlight = 'Normal:CmpPmenu,FloatBorder:CmpPmenuBorder,CursorLine:PmenuSel,Search:None', }, completion = { side_padding = 1, border = { '┌', '─', '┐', '│', '┘', '─', '└', '│' }, winhighlight = 'Normal:CmpPmenu,FloatBorder:CmpPmenuBorder,CursorLine:PmenuSel,Search:None', scrollbar = false, }, }, snippet = { -- configure how nvim-cmp interacts with snippet engine expand = function(args) luasnip.lsp_expand(args.body) end, }, mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping.complete(), -- show completion suggestions [""] = cmp.mapping.abort(), -- close completion menu [""] = cmp.mapping.confirm({ select = true }), -- accept current selection }), -- sources for autocompletion sources = cmp.config.sources({ { name = "nvim_lsp" }, { name = "luasnip" }, -- snippets { name = "buffer" }, -- text within current buffer { name = "path" }, -- file system paths, { name = 'nvim_lsp_signature_help' }, }), -- configure lspkind for vs-code like pictograms in completion menu formatting = { format = lspkind.cmp_format({ maxwidth = 50, ellipsis_char = "...", }), }, })