Dotfiles/site-modules/core/files/vim/plugin/completion.lua
Ade Attwood f7821ef42e feat(vim): add completion source name to completion menu
We have the kind of the completion item in the menu as an icon and the
name at the end. Now the end one has been replaced with the source name
so we can see what the completion item is and where it is from.
2023-05-16 19:22:45 +01:00

92 lines
2.4 KiB
Lua

local cmp = require'cmp'
local luasnip = require'luasnip'
local icons = {
Text = "",
Method = "",
Function = "",
Constructor = "",
Field = "",
Variable = "",
Class = "",
Interface = "",
Module = "",
Property = "",
Unit = "",
Value = "",
Enum = "",
Keyword = "",
Snippet = "",
Color = "",
File = "",
Reference = "",
Folder = "",
EnumMember = "",
Constant = "",
Struct = "",
Event = "",
Operator = "",
}
cmp.setup({
mapping = cmp.mapping.preset.insert({
['<C-j>'] = cmp.get_config().mapping['<Down>'],
['<C-k>'] = cmp.get_config().mapping['<Up>'],
['<C-l>'] = function() luasnip.jump(1) end,
['<C-h>'] = function() luasnip.jump(-1) end,
['<C-e>'] = cmp.mapping.abort(),
['<CR>'] = cmp.mapping.confirm({ select = true }),
["<Tab>"] = cmp.mapping(function(fallback)
if luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
else
fallback()
end
end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback)
if luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, { "i", "s" }),
}),
sources = {
{ name = "luasnip" },
{ name = 'nvim_lsp' },
{ name = 'buffer' },
{ name = 'path' },
{ name = 'orgmode' }
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
window = {
completion = cmp.config.window.bordered(),
documentation = cmp.config.window.bordered(),
},
formatting = {
fields = { 'menu', 'abbr', 'kind' },
format = function(entry, vim_item)
-- Give the completion menu a consistent size to stop it jumping arround
local width = 40
if #vim_item.abbr > width then
vim_item.abbr = string.sub(vim_item.abbr, 1, width)
else
vim_item.abbr = vim_item.abbr .. string.rep(" ", width - #vim_item.abbr)
end
vim_item.menu = icons[vim_item.kind] or " "
vim_item.kind = "(" .. entry.source.name .. ")"
return vim_item
end,
},
experimental = {
ghost_text = false,
},
})