summaryrefslogtreecommitdiff
path: root/pkgs/old-custom-neovim/config/lua/completion.lua
diff options
context:
space:
mode:
authortriethyl <triethylammonium@pm.me>2025-08-16 20:20:21 -0400
committertriethyl <triethylammonium@pm.me>2025-08-16 20:20:21 -0400
commit58ceb817bb6ba195d1189160878f318f3bcda0ef (patch)
tree6c17c013c92af8c6e410bb1d4fe3a2557841d0d3 /pkgs/old-custom-neovim/config/lua/completion.lua
parent94980b0be13a690128992d98a2ed5db3ab592642 (diff)
neovim: restarted config
Diffstat (limited to 'pkgs/old-custom-neovim/config/lua/completion.lua')
-rw-r--r--pkgs/old-custom-neovim/config/lua/completion.lua98
1 files changed, 98 insertions, 0 deletions
diff --git a/pkgs/old-custom-neovim/config/lua/completion.lua b/pkgs/old-custom-neovim/config/lua/completion.lua
new file mode 100644
index 0000000..1ba2a91
--- /dev/null
+++ b/pkgs/old-custom-neovim/config/lua/completion.lua
@@ -0,0 +1,98 @@
+vim.opt.completeopt = {'menu', 'menuone', 'noselect'}
+
+require('luasnip.loaders.from_vscode').lazy_load()
+
+local cmp = require('cmp')
+local luasnip = require('luasnip')
+
+local select_opts = {behavior = cmp.SelectBehavior.Select}
+
+cmp.setup({
+ enabled = function() -- Disable in certain circumstances
+ local disabled = false
+ disabled = disabled or (vim.api.nvim_get_option_value('buftype', { buf = 0 }) == 'prompt') -- While in prompts.
+ disabled = disabled or (vim.fn.reg_recording() ~= '')
+ disabled = disabled or (vim.fn.reg_executing() ~= '')
+ disabled = disabled or require('cmp.config.context').in_treesitter_capture('comment') -- While in comments.
+ return not disabled
+ end,
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end
+ },
+ sources = {
+ {name = 'path'},
+ {name = 'nvim_lsp', keyword_length = 1},
+ {name = 'buffer', keyword_length = 3},
+ {name = 'luasnip', keyword_length = 2},
+ },
+ window = {
+ documentation = cmp.config.window.bordered()
+ },
+ formatting = {
+ fields = {'menu', 'abbr', 'kind'},
+ format = function(entry, item)
+ local menu_icon = {
+ nvim_lsp = 'λ',
+ luasnip = '⋗',
+ buffer = 'Ω',
+ path = '🖫',
+ }
+
+ item.menu = menu_icon[entry.source.name]
+ return item
+ end,
+ },
+ mapping = {
+ -- ['<Up>'] = cmp.mapping.select_prev_item(select_opts),
+ -- ['<Down>'] = cmp.mapping.select_next_item(select_opts),
+
+ ['<C-p>'] = cmp.mapping.select_prev_item(select_opts),
+ ['<C-n>'] = cmp.mapping.select_next_item(select_opts),
+
+ ['<C-u>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-d>'] = cmp.mapping.scroll_docs(4),
+
+ ['<C-e>'] = cmp.mapping.abort(),
+ -- ['<esc>'] = cmp.mapping.abort(),
+ ['<C-y>'] = cmp.mapping.confirm({select = true}),
+ ['<CR>'] = cmp.mapping.confirm({select = false}),
+
+ ['<C-f>'] = cmp.mapping(function(fallback)
+ if luasnip.jumpable(1) then
+ luasnip.jump(1)
+ else
+ fallback()
+ end
+ end, {'i', 's'}),
+
+ ['<C-b>'] = cmp.mapping(function(fallback)
+ if luasnip.jumpable(-1) then
+ luasnip.jump(-1)
+ else
+ fallback()
+ end
+ end, {'i', 's'}),
+
+ ['<Tab>'] = cmp.mapping(function(fallback)
+ local col = vim.fn.col('.') - 1
+
+ if cmp.visible() then
+ cmp.select_next_item(select_opts)
+ elseif col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
+ fallback()
+ else
+ -- cmp.complete()
+ end
+ end, {'i', 's'}),
+
+ ['<S-Tab>'] = cmp.mapping(function(fallback)
+ if cmp.visible() then
+ cmp.select_prev_item(select_opts)
+ else
+ fallback()
+ end
+ end, {'i', 's'}),
+ },
+})