From 0dd4a191a10f1a8bf1458bda71012ea86e60438b Mon Sep 17 00:00:00 2001 From: Ade Attwood Date: Thu, 8 Sep 2022 20:45:35 +0100 Subject: [PATCH] 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` --- .../core/files/vim/plugin/completion.lua | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/site-modules/core/files/vim/plugin/completion.lua b/site-modules/core/files/vim/plugin/completion.lua index 4541784..08e6d06 100644 --- a/site-modules/core/files/vim/plugin/completion.lua +++ b/site-modules/core/files/vim/plugin/completion.lua @@ -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, + }, })