local status_ok, cmp = pcall(require, "cmp") if not status_ok then return end local lspicons = { Text = 'Tx', Snippet = '<>', Method = '{}', Function = '{}', Constructor = '{}', Field = '""', Variable = 'i=', Class = '{}', Interface = '.h', Module = '{}', Property = '@p', Unit = ' ', Value = 'x=', Enum = 'E#', Keyword = '$1', Color = ' ', File = '#`', Reference = ' ', Folder = '[/', EnumMember = ' ', Constant = 'c=', Struct = ' ', Event = ' ', Operator = '%*', TypeParameter = ' ', } local has_words_before = function() unpack = unpack or table.unpack local line, col = unpack(a.nvim_win_get_cursor(0)) return col ~= 0 and a.nvim_buf_get_lines(0, line - 1, line, true) [1]:sub(col, col):match("%s") == nil end -- insert '(' after completing a function cmp.event:on( 'confirm_done', require('nvim-autopairs.completion.cmp').on_confirm_done() ) local luasnip = require('luasnip') local neogen = require('neogen') require("luasnip.loaders.from_vscode").lazy_load() cmp.setup { snippet = { expand = function(args) luasnip.lsp_expand(args.body) end, }, sources = cmp.config.sources({ { name = 'nvim_lsp', keyword_length = 3 }, { name = 'luasnip', keyword_length = 3 }, { name = 'async_path' }, { name = 'buffer', keyword_length = 3, max_item_count = 7 }, { name = 'calc' }, { name = 'neorg' }, }), window = { completion = { border = { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, winhighlight = "Normal:WinBarNC,FloatBorder:WinBarNC,Search:WinBarNC", }, documentation = { border = { ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, winhighlight = "Normal:WinBarNC,FloatBorder:WinBarNC,Search:WinBarNC", } }, view = { entries = { name = 'custom', selection_order = 'near_cursor' }, }, -- mappings ----------------------------------------------------------------- mapping = cmp.mapping.preset.insert({ [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_next_item() elseif luasnip.expand_or_locally_jumpable() then luasnip.expand_or_jump() elseif has_words_before() then cmp.complete() elseif neogen.jumpable() then neogen.jump_next() else require("intellitab").indent() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) if cmp.visible() then cmp.select_prev_item() elseif luasnip.jumpable(-1) then luasnip.jump(-1) elseif neogen.jumpable(true) then neogen.jump_prev() else fallback() end end, { "i", "s" }), [''] = cmp.mapping({ i = function(fallback) if cmp.visible() and cmp.get_active_entry() then cmp.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = false }) else fallback() end end, s = cmp.mapping.confirm({ select = true }), c = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Replace, select = true }), }), [''] = cmp.mapping.close(), }), sorting = { comparators = { cmp.config.compare.offset, cmp.config.compare.exact, cmp.config.compare.score, require "cmp-under-comparator".under, cmp.config.compare.kind, cmp.config.compare.sort_text, cmp.config.compare.length, cmp.config.compare.order, }, }, enabled = function() local context = require 'cmp.config.context' if a.nvim_get_mode().mode == 'c' then return true else return not context.in_treesitter_capture("comment") and not context.in_syntax_group("Comment") end end }