From aa15a0fe47418a2fe1354589a3dafd3ae8c3db42 Mon Sep 17 00:00:00 2001 From: Thomas Vanbesien Date: Fri, 12 Jun 2026 22:56:03 +0200 Subject: refactor(nvim): rename file --- .config/nvim/plugin/50-autocompletion.lua | 81 +++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 .config/nvim/plugin/50-autocompletion.lua (limited to '.config/nvim/plugin/50-autocompletion.lua') diff --git a/.config/nvim/plugin/50-autocompletion.lua b/.config/nvim/plugin/50-autocompletion.lua new file mode 100644 index 0000000..caf749d --- /dev/null +++ b/.config/nvim/plugin/50-autocompletion.lua @@ -0,0 +1,81 @@ +-- +-- Completion configuration plugin +-- + +------------------------------------------------------------------------------------------------------------------------ +-- Insert mode completion +------------------------------------------------------------------------------------------------------------------------ +-- See `:help ins-completion-menu` + +vim.opt.autocomplete = true -- Show completion menu automatically +vim.opt.completeopt = { + "noselect", -- No item selected initially + "fuzzy", + "menuone", -- Show matches in a menu, even if there's only one match + "popup", -- Menu items show extra info in the popup window +} + +-- Completion sources (in order of priority) +vim.opt.complete = { + "o", -- 'omnifunc' +} +vim.opt.pumwidth = 25 +vim.keymap.set("i", "", function() + return vim.fn.pumvisible() == 1 and "" or "" +end, { expr = true }) +vim.keymap.set("i", "", function() + return vim.fn.pumvisible() == 1 and "" or "" +end, { expr = true }) + +-- Jump between snippet placeholders, falling back to native behavior when no snippet is active +vim.keymap.set({ "i", "s" }, "", function() + return vim.snippet.active({ direction = 1 }) and "lua vim.snippet.jump(1)" or "" +end, { expr = true }) +vim.keymap.set({ "i", "s" }, "", function() + return vim.snippet.active({ direction = -1 }) and "lua vim.snippet.jump(-1)" or "" +end, { expr = true }) + +------------------------------------------------------------------------------------------------------------------------ +-- Command-line mode completion +------------------------------------------------------------------------------------------------------------------------ +-- See `:help cmdline-completion` and `:help cmdline-autocompletion` + +-- Show completion menu automatically +vim.api.nvim_create_autocmd({ "CmdlineChanged", "CmdlineEnter" }, { + desc = "Autocompletion", + group = vim.g.dotfiles.augroup, + pattern = "[:\\/\\?]", + callback = function() + vim.fn.wildtrigger() + end, +}) +vim.opt.wildmenu = true -- Show completions in a menu +vim.opt.wildchar = 9 -- Char code assigned to command line wildcard expansion +vim.opt.pumborder = "rounded" +vim.opt.wildoptions = { + "exacttext", -- Discard regex artifacts when performing search pattern completion + "pum", -- Show completions in a popup menu + "tagfile", -- Show tag kind and file + "fuzzy", -- Fuzzy matching (doesn't work with files/dirs, see `:help 'wildoptions'`, but patterns do work!) +} +-- Completion modes triggered in order by `wildtrigger()` or 'wildchar' +vim.opt.wildmode = { + "noselect", -- List matches without inserting + "full", -- List matches and insert first full match +} +-- Insert unique match +vim.keymap.set("c", string.format("%c", vim.o.wildchar), function() + local complete_info = vim.fn.cmdcomplete_info() + if complete_info.pum_visible == 1 then + return #complete_info.matches == 1 and "" or "" + end + vim.fn.wildtrigger() +end, { expr = true, desc = "Command line wildcard expansion" }) +-- Show next completion choices after accepting an entry with `` +vim.keymap.set("c", "", function() + local complete_info = vim.fn.cmdcomplete_info() + if complete_info.pum_visible == 1 then + return complete_info.selected ~= -1 and "" or "" + end + return "" +end, { expr = true }) -- cgit v1.3.1