local cmp = require "cmp" local lspzero_cmp_act = require('lsp-zero').cmp_action() local function border(hl_name) return { { "╭", hl_name }, { "─", hl_name }, { "╮", hl_name }, { "│", hl_name }, { "╯", hl_name }, { "─", hl_name }, { "╰", hl_name }, { "│", hl_name }, } end local options = { completion = { completeopt = "menu,menuone", }, window = { completion = { border = border "CmpBorder", winhighlight = "Normal:CmpPmenu,CursorLine:CmpSel,CursorLine:PmenuSel", scrollbar = false, }, documentation = { border = border "CmpDocBorder", winhighlight = "Normal:CmpDoc", }, }, snippet = { expand = function(args) require("luasnip").lsp_expand(args.body) end, }, formatting = { fields = { "abbr", "kind", "menu" }, format = function(_, item) local icons = { Text = " ", Method = " ", Function = " ", Constructor = " ", Field = " ", Variable = " ", Class = " ", Interface = " ", Module = " ", Property = " ", Unit = " ", Value = " ", Enum = " ", Keyword = " ", Snippet = " ", Color = " ", File = " ", Reference = " ", Folder = " ", EnumMember = " ", Constant = " ", Struct = " ", Event = " ", Operator = " ", TypeParameter = " ", } local icon = icons[item.kind] or "" item.kind = string.format(" %s %s", icon, item.kind) return item end, }, mapping = cmp.mapping.preset.insert({ [''] = cmp.mapping.complete(), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = lspzero_cmp_act.luasnip_jump_forward(), [''] = lspzero_cmp_act.luasnip_jump_backward(), }), sources = { { name = "nvim_lsp" }, { name = "luasnip" }, { name = "buffer" }, { name = "nvim_lua" }, { name = "path" }, }, } return options