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 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 = {
['<c-n>'] = map(map.complete_or_select_next),
['<c-p>'] = map(map.complete_or_select_previous),
['<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-n>'] = when(cmp.visible) {
yes = cmp.mapping.select_next_item { behavior = cmp.SelectBehavior.Select },
no = cmp.mapping.complete(),
}
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 {
mapping = keymap,