diff options
author | Squibid <me@zacharyscheiman.com> | 2024-08-09 02:45:31 -0400 |
---|---|---|
committer | Squibid <me@zacharyscheiman.com> | 2024-08-09 02:45:31 -0400 |
commit | c489d393695e90d424f9ae51e35c4d42358e6a71 (patch) | |
tree | 12ea97ec4684fd82cd6b73dd127d0137b115837b /lua/conf/plugins/cmp.lua | |
parent | ad76983d969c318e6e234bc82384b4b025d70447 (diff) | |
download | nvim-c489d393695e90d424f9ae51e35c4d42358e6a71.tar.gz nvim-c489d393695e90d424f9ae51e35c4d42358e6a71.tar.bz2 nvim-c489d393695e90d424f9ae51e35c4d42358e6a71.zip |
yes there's a bit of java in my nvim config why do you ask?
Diffstat (limited to '')
-rw-r--r-- | lua/conf/plugins/cmp.lua | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/lua/conf/plugins/cmp.lua b/lua/conf/plugins/cmp.lua new file mode 100644 index 0000000..5dbb6ed --- /dev/null +++ b/lua/conf/plugins/cmp.lua @@ -0,0 +1,170 @@ +local function has_words_before() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true) + [1]:sub(col, col):match("%s") == nil +end + +return { 'hrsh7th/nvim-cmp', + requires = { + 'danymat/neogen', + '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') + local neogen = require('neogen') + + 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', + calc = '+', + luasnip = '%', + buffer = '@', + 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 { + ["<Tab>"] = cmp.mapping(function(fallback) + if #cmp.get_entries() == 1 then + cmp.confirm({ select = true }) + elseif 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() + if #cmp.get_entries() == 1 then + cmp.confirm({ select = true }) + end + elseif neogen.jumpable() then + neogen.jump_next() + else + fallback() + end + end, { "i", "s" }), + + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + elseif neogen.jumpable(-1) then + neogen.jump_prev() + else + fallback() + end + end, { "i", "s" }), + + ['<CR>'] = 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 }), + }, + + ["<C-u>"] = cmp.mapping.scroll_docs(-4), + ["<C-d>"] = cmp.mapping.scroll_docs(4), + ['<ESC>'] = cmp.mapping.close(), + ["<C-e>"] = cmp.mapping.abort() + } + } + end +} |