cmp.lua (1980B)
1 local cmp = require("cmp") 2 local luasnip = require("luasnip") 3 4 luasnip.config.setup({}) 5 6 local kind_icons = { 7 Text = "", 8 Method = "m", 9 Function = "", 10 Constructor = "", 11 Field = "", 12 Variable = "", 13 Class = "", 14 Interface = "", 15 Module = "", 16 Property = "", 17 Unit = "", 18 Value = "", 19 Enum = "", 20 Keyword = "", 21 Snippet = "", 22 Color = "", 23 File = "", 24 Reference = "", 25 Folder = "", 26 EnumMember = "", 27 Constant = "", 28 Struct = "", 29 Event = "", 30 Operator = "", 31 TypeParameter = "", 32 } 33 34 cmp.setup({ 35 snippet = { 36 expand = function(args) 37 luasnip.lsp_expand(args.body) 38 end, 39 }, 40 completion = { completeopt = "menu,menuone,noinsert" }, 41 mapping = cmp.mapping.preset.insert({ 42 ["<C-n>"] = cmp.mapping.select_next_item(), 43 ["<C-p>"] = cmp.mapping.select_prev_item(), 44 ["<C-b>"] = cmp.mapping.scroll_docs(-4), 45 ["<C-f>"] = cmp.mapping.scroll_docs(4), 46 ["<CR>"] = cmp.mapping.confirm({ select = true }), 47 ["<C-Space>"] = cmp.mapping.complete({}), 48 ["<Tab>"] = cmp.mapping(function(fallback) 49 if cmp.visible() then 50 cmp.select_next_item() 51 elseif luasnip.expand_or_locally_jumpable() then 52 luasnip.expand_or_jump() 53 else 54 fallback() 55 end 56 end, { "i", "s" }), 57 ["<S-Tab>"] = cmp.mapping(function(fallback) 58 if cmp.visible() then 59 cmp.select_prev_item() 60 elseif luasnip.locally_jumpable(-1) then 61 luasnip.jump(-1) 62 else 63 fallback() 64 end 65 end, { "i", "s" }), 66 }), 67 sources = { 68 { 69 name = "lazydev", 70 group_index = 0, 71 }, 72 { name = "nvim_lsp" }, 73 { name = "luasnip" }, 74 { name = "buffer" }, 75 { name = "path" }, 76 }, 77 formatting = { 78 fields = { "kind", "abbr", "menu" }, 79 format = function(entry, vim_item) 80 vim_item.kind = string.format("%s", kind_icons[vim_item.kind]) 81 vim_item.menu = ({ 82 nvim_lsp = "[LSP]", 83 luasnip = "[Snippet]", 84 buffer = "[Buffer]", 85 path = "[Path]", 86 })[entry.source.name] 87 return vim_item 88 end, 89 }, 90 })