From f9569c4c426ec22336710688f8489b28296fca06 Mon Sep 17 00:00:00 2001 From: Fernando Schauenburg Date: Thu, 13 Jul 2023 02:11:54 +0200 Subject: [PATCH] vim: clean up completion keymap --- config/nvim/lua/user/plugins/completion.lua | 74 +++++++++------------ 1 file changed, 33 insertions(+), 41 deletions(-) diff --git a/config/nvim/lua/user/plugins/completion.lua b/config/nvim/lua/user/plugins/completion.lua index d093b43..ad41de0 100644 --- a/config/nvim/lua/user/plugins/completion.lua +++ b/config/nvim/lua/user/plugins/completion.lua @@ -1,54 +1,46 @@ local config = function() local cmp = require('cmp') - local map = setmetatable({ - complete_or_select_next = function() - if cmp.visible() then - cmp.select_next_item { behavior = cmp.SelectBehavior.Select } - else - cmp.complete() + local when = function(condition) + local default = function(fallback) fallback() end + return function(opts) + local yes = opts.yes or default + local no = opts.no or default + return function(fallback) + if condition() then yes(fallback) else no(fallback) end end - end, + end + end - complete_or_select_previous = function() - if cmp.visible() then - cmp.select_prev_item { behavior = cmp.SelectBehavior.Select } - else - cmp.complete() - end + local keymap = setmetatable({}, { + __newindex = function(t, k, v) + rawset(t, k, { i = v, c = v}) end, - - tab_completion = function(fallback) - if cmp.visible() then - cmp.complete_common_string() - elseif vim.fn.mode() == 'c' then - cmp.complete() - else - fallback() - end - end, - }, { - -- Make `func` available in [i]nsert and [c]mdline modes. - __call = function(_, func) return { i = func, c = func } end }) - local keymap = { - [''] = map(map.complete_or_select_next), - [''] = map(map.complete_or_select_previous), - - [''] = map(cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select }), - [''] = map(cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select }), - - [''] = map(cmp.mapping.scroll_docs(4)), - [''] = map(cmp.mapping.scroll_docs(4)), - [''] = map(cmp.mapping.scroll_docs(-4)), - [''] = map(cmp.mapping.scroll_docs(-4)), - - [''] = map(cmp.mapping.abort()), - [''] = map(cmp.mapping.confirm { select = true }), - [''] = map(map.tab_completion), + keymap[''] = when(cmp.visible) { + yes = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select }, + no = cmp.mapping.complete(), } + keymap[''] = when(cmp.visible) { + yes = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select }, + no = cmp.mapping.complete(), + } + + keymap[''] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select } + keymap[''] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select } + + keymap[''] = cmp.mapping.scroll_docs(4) + keymap[''] = cmp.mapping.scroll_docs(4) + keymap[''] = cmp.mapping.scroll_docs(-4) + keymap[''] = cmp.mapping.scroll_docs(-4) + + keymap[''] = cmp.mapping.abort() + keymap[''] = cmp.mapping.confirm { select = true } + keymap[''] = when(cmp.visible) { yes = cmp.mapping.confirm { select = true } } + + cmp.setup { mapping = keymap,