vim: clean up completion keymap

This commit is contained in:
Fernando Schauenburg 2023-07-13 02:11:54 +02:00
parent f323416c59
commit f9569c4c42

View file

@ -1,54 +1,46 @@
local config = function() local config = function()
local cmp = require('cmp') local cmp = require('cmp')
local map = setmetatable({ local when = function(condition)
complete_or_select_next = function() local default = function(fallback) fallback() end
if cmp.visible() then return function(opts)
cmp.select_next_item { behavior = cmp.SelectBehavior.Select } local yes = opts.yes or default
else local no = opts.no or default
cmp.complete() return function(fallback)
if condition() then yes(fallback) else no(fallback) end
end end
end, end
end
complete_or_select_previous = function() local keymap = setmetatable({}, {
if cmp.visible() then __newindex = function(t, k, v)
cmp.select_prev_item { behavior = cmp.SelectBehavior.Select } rawset(t, k, { i = v, c = v})
else
cmp.complete()
end
end, 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 = { keymap['<c-n>'] = when(cmp.visible) {
['<c-n>'] = map(map.complete_or_select_next), yes = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select },
['<c-p>'] = map(map.complete_or_select_previous), no = cmp.mapping.complete(),
['<down>'] = map(cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select }),
['<up>'] = map(cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select }),
['<c-f>'] = map(cmp.mapping.scroll_docs(4)),
['<s-down>'] = map(cmp.mapping.scroll_docs(4)),
['<c-b>'] = map(cmp.mapping.scroll_docs(-4)),
['<s-up>'] = map(cmp.mapping.scroll_docs(-4)),
['<c-e>'] = map(cmp.mapping.abort()),
['<c-y>'] = map(cmp.mapping.confirm { select = true }),
['<tab>'] = map(map.tab_completion),
} }
keymap['<c-p>'] = when(cmp.visible) {
yes = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select },
no = cmp.mapping.complete(),
}
keymap['<down>'] = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select }
keymap['<up>'] = cmp.mapping.select_prev_item { behavior = cmp.SelectBehavior.Select }
keymap['<c-f>'] = cmp.mapping.scroll_docs(4)
keymap['<s-down>'] = cmp.mapping.scroll_docs(4)
keymap['<c-b>'] = cmp.mapping.scroll_docs(-4)
keymap['<s-up>'] = cmp.mapping.scroll_docs(-4)
keymap['<c-e>'] = cmp.mapping.abort()
keymap['<c-y>'] = cmp.mapping.confirm { select = true }
keymap['<tab>'] = when(cmp.visible) { yes = cmp.mapping.confirm { select = true } }
cmp.setup { cmp.setup {
mapping = keymap, mapping = keymap,