feat(vim): style the completion better

This also keeps it a consistent width so it does not keep jumping
arround. We are also using nice nerd font icons without using `lspkind`
This commit is contained in:
Ade Attwood 2022-09-08 20:45:35 +01:00
parent 4274d31d39
commit 0dd4a191a1

View file

@ -1,6 +1,33 @@
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 = "",
}
local has_words_before = function()
local line, col = unpack(vim.api.nvim_win_get_cursor(0))
return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil
@ -52,5 +79,28 @@ cmp.setup({
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 = 34
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 = "(" .. vim_item.kind .. ")"
return vim_item
end,
},
experimental = {
ghost_text = false,
},
})