return { 'hrsh7th/nvim-cmp', requires = { 'nvim-treesitter/nvim-treesitter', 'lukas-reineke/cmp-under-comparator' -- better results }, -- suppliers for completions (they require nvim-cmp to be loaded before they are) deps = { 'hrsh7th/cmp-buffer', -- buffers 'FelipeLema/cmp-async-path', -- path 'hrsh7th/cmp-nvim-lsp', -- lsp 'hrsh7th/cmp-nvim-lsp-signature-help', -- completion information { 'L3MON4D3/cmp-luasnip-choice', -- luasnip requires = 'L3MON4D3/LuaSnip' } }, function() local cmp = require('cmp') local luasnip = require('luasnip') cmp.setup { -- disable when in comments enabled = function() local context = require('cmp.config.context') if vim.api.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, -- completion sources sources = cmp.config.sources { { name = 'nvim_lsp', priority = 999 }, { name = 'luasnip_choice', priority = 750 }, { name = 'buffer', max_item_count = 3 }, { name = 'async_path', max_item_count = 5 }, { name = 'neorg' }, { name = 'nvim_lsp_signature_help' } }, -- how to sort results 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, } }, -- appearance of window window = { completion = { scrollbar = false, border = 'solid', winhighlight = "Normal:WinBarNC,FloatBorder:WinBarNC,Search:WinBarNC", }, documentation = { border = 'solid', winhighlight = "Normal:WinBarNC,FloatBorder:WinBarNC,Search:WinBarNC", } }, -- position of window view = { entries = { name = 'custom', selection_order = 'near_cursor' } }, -- formatting of content formatting = { fields = { 'menu', 'abbr', 'kind' }, format = function(entry, item) local menu_icon = { nvim_lsp = 'λ', nvim_lua = 'v', luasnip = '%', buffer = '@', path = '#', async_path = '#' } item.menu = menu_icon[entry.source.name] return item end }, experimental = { ghost_text = true }, -- snippet integration snippet = { expand = function(args) luasnip.lsp_expand(args.body) end }, -- mappings mapping = cmp.mapping.preset.insert { [""] = cmp.mapping(function() if cmp.get_active_entry() then cmp.confirm({ select = true }) elseif cmp.visible() and not cmp.get_active_entry() then cmp.select_next_item() cmp.confirm({ select = true }) end end, { "i", "c" }), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_next_item() end end), [""] = cmp.mapping(function() if cmp.visible() then cmp.select_prev_item() end end), [""] = cmp.mapping.scroll_docs(-4), [""] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.close() } } end }