feat(nvim): massively improve cmp appearance
This commit is contained in:
parent
1930ebd315
commit
fd2cd731da
@ -1,98 +1,157 @@
|
||||
local cmp = require('cmp')
|
||||
local types = require('cmp.types')
|
||||
local str = require('cmp.utils.str')
|
||||
local cmp = require("cmp")
|
||||
local types = require("cmp.types")
|
||||
local str = require("cmp.utils.str")
|
||||
local compare = cmp.config.compare
|
||||
local luasnip = require('luasnip')
|
||||
local luasnip = require("luasnip")
|
||||
|
||||
local kind_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 = '',
|
||||
TypeParameter = '',
|
||||
Text = "",
|
||||
Method = "",
|
||||
Function = "",
|
||||
Constructor = "",
|
||||
Field = "",
|
||||
Variable = "",
|
||||
Class = "ﴯ",
|
||||
Interface = "",
|
||||
Module = "",
|
||||
Property = "ﰠ",
|
||||
Unit = "",
|
||||
Value = "",
|
||||
Enum = "",
|
||||
Keyword = "",
|
||||
Snippet = "",
|
||||
Color = "",
|
||||
File = "",
|
||||
Reference = "",
|
||||
Folder = "",
|
||||
EnumMember = "",
|
||||
Constant = "",
|
||||
Struct = "",
|
||||
Event = "",
|
||||
Operator = "",
|
||||
TypeParameter = "",
|
||||
}
|
||||
|
||||
-- Load Snippets
|
||||
require('luasnip.loaders.from_vscode').lazy_load()
|
||||
require("luasnip.loaders.from_vscode").lazy_load()
|
||||
|
||||
local border = {
|
||||
{ '╭', 'CmpBorder' },
|
||||
{ '─', 'CmpBorder' },
|
||||
{ '╮', 'CmpBorder' },
|
||||
{ '│', 'CmpBorder' },
|
||||
{ '╯', 'CmpBorder' },
|
||||
{ '─', 'CmpBorder' },
|
||||
{ '╰', 'CmpBorder' },
|
||||
{ '│', 'CmpBorder' },
|
||||
{ "╭", "CmpBorder" },
|
||||
{ "─", "CmpBorder" },
|
||||
{ "╮", "CmpBorder" },
|
||||
{ "│", "CmpBorder" },
|
||||
{ "╯", "CmpBorder" },
|
||||
{ "─", "CmpBorder" },
|
||||
{ "╰", "CmpBorder" },
|
||||
{ "│", "CmpBorder" },
|
||||
}
|
||||
|
||||
cmp.setup({
|
||||
-- formatting = {
|
||||
-- fields = {
|
||||
-- cmp.ItemField.Kind,
|
||||
-- cmp.ItemField.Abbr,
|
||||
-- cmp.ItemField.Menu,
|
||||
-- },
|
||||
-- format = function(entry, vim_item)
|
||||
-- -- Get the full snippet (and only keep first line)
|
||||
-- local word = entry:get_insert_text()
|
||||
-- if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet then
|
||||
-- word = vim.lsp.util.parse_snippet(word)
|
||||
-- end
|
||||
-- word = str.oneline(word)
|
||||
--
|
||||
-- -- concatenates the string
|
||||
-- local max = 50
|
||||
-- if string.len(word) >= max then
|
||||
-- local before = string.sub(word, 1, math.floor((max - 3) / 2))
|
||||
-- word = before .. "..."
|
||||
-- end
|
||||
--
|
||||
-- if
|
||||
-- entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet
|
||||
-- and string.sub(vim_item.abbr, -1, -1) == "~"
|
||||
-- then
|
||||
-- word = word .. "~"
|
||||
-- end
|
||||
-- vim_item.abbr = word
|
||||
-- -- Kind icons
|
||||
-- vim_item.kind = string.format("%s %s", kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind
|
||||
--
|
||||
-- return vim_item
|
||||
-- end,
|
||||
-- },
|
||||
formatting = {
|
||||
|
||||
fields = {
|
||||
cmp.ItemField.Kind,
|
||||
cmp.ItemField.Abbr,
|
||||
cmp.ItemField.Menu,
|
||||
},
|
||||
format = function(entry, vim_item)
|
||||
-- Get the full snippet (and only keep first line)
|
||||
local word = entry:get_insert_text()
|
||||
if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet then
|
||||
word = vim.lsp.util.parse_snippet(word)
|
||||
end
|
||||
word = str.oneline(word)
|
||||
local selections = {
|
||||
fuzzy_buffer = {
|
||||
symbol = " ",
|
||||
name = "Buffer",
|
||||
},
|
||||
luasnip = {
|
||||
symbol = " ",
|
||||
name = "Snippet",
|
||||
},
|
||||
path = {
|
||||
symbol = " ",
|
||||
name = "Path",
|
||||
},
|
||||
calc = {
|
||||
symbol = " ",
|
||||
name = "Calculator",
|
||||
},
|
||||
neorg = {
|
||||
symbol = " ",
|
||||
name = "Neorg",
|
||||
},
|
||||
emoji = {
|
||||
symbol = "ﲃ ",
|
||||
name = "Emoji",
|
||||
},
|
||||
zsh = {
|
||||
symbol = " ",
|
||||
name = "Zsh",
|
||||
},
|
||||
crates = {
|
||||
symbol = " ",
|
||||
name = "Crates",
|
||||
},
|
||||
cmdline_history = {
|
||||
symbol = " ",
|
||||
name = "Cmd History",
|
||||
},
|
||||
rg = {
|
||||
symbol = " ",
|
||||
name = "Ripgrep",
|
||||
},
|
||||
npm = {
|
||||
symbol = " ",
|
||||
name = "Npm,",
|
||||
},
|
||||
conventionalcommits = {
|
||||
symbol = " ",
|
||||
name = "Commit",
|
||||
},
|
||||
}
|
||||
|
||||
-- concatenates the string
|
||||
local max = 50
|
||||
if string.len(word) >= max then
|
||||
local before = string.sub(word, 1, math.floor((max - 3) / 2))
|
||||
word = before .. '...'
|
||||
local selection = selections[entry.source.name]
|
||||
if not selection then
|
||||
local kind = require("lspkind").cmp_format({ mode = "symbol_text", maxwidth = 50 })(entry, vim_item)
|
||||
local strings = vim.split(kind.kind, "%s", { trimempty = true })
|
||||
kind.kind = " " .. strings[1] .. " "
|
||||
vim_item.menu = strings[1] .. " " .. strings[2]
|
||||
return kind
|
||||
else
|
||||
vim_item.kind = " " .. selection.symbol
|
||||
vim_item.menu = selection.symbol .. selection.name
|
||||
return vim_item
|
||||
end
|
||||
|
||||
if entry.completion_item.insertTextFormat == types.lsp.InsertTextFormat.Snippet
|
||||
and string.sub(vim_item.abbr, -1, -1) == '~'
|
||||
then
|
||||
word = word .. '~'
|
||||
end
|
||||
vim_item.abbr = word
|
||||
-- Kind icons
|
||||
vim_item.kind = string.format('%s %s', kind_icons[vim_item.kind], vim_item.kind) -- This concatonates the icons with the name of the item kind
|
||||
-- Source
|
||||
vim_item.menu = ({
|
||||
fuzzy_buffer = '[Buffer]',
|
||||
nvim_lsp = '[Lsp]',
|
||||
luasnip = '[LuaSnip]',
|
||||
path = '[Path]',
|
||||
calc = '[Calculator]',
|
||||
neorg = '[Neorg]',
|
||||
emoji = '[Emoji]',
|
||||
zsh = '[Zsh]',
|
||||
crates = '[Crates]',
|
||||
cmdline_history = '[Cmd History]',
|
||||
rg = '[Ripgrep]',
|
||||
npm = '[Npm],',
|
||||
conventionalcommits = '[Commit]',
|
||||
})[entry.source.name]
|
||||
return vim_item
|
||||
end,
|
||||
},
|
||||
window = {
|
||||
@ -100,7 +159,10 @@ cmp.setup({
|
||||
border = border,
|
||||
},
|
||||
completion = {
|
||||
border = border,
|
||||
winhighlight = "Normal:Pmenu,FloatBorder:Pmenu,Search:None",
|
||||
col_offset = -3,
|
||||
side_padding = 0,
|
||||
-- border = border,
|
||||
},
|
||||
},
|
||||
experimental = {
|
||||
@ -110,41 +172,41 @@ cmp.setup({
|
||||
snippet = {
|
||||
-- REQUIRED - you must specify a snippet engine
|
||||
expand = function(args)
|
||||
require('luasnip').lsp_expand(args.body) -- For `luasnip` users.
|
||||
require("luasnip").lsp_expand(args.body) -- For `luasnip` users.
|
||||
end,
|
||||
},
|
||||
mapping = {
|
||||
['<C-b>'] = cmp.mapping(cmp.mapping.scroll_docs(-4), { 'i', 'c' }),
|
||||
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(4), { 'i', 'c' }),
|
||||
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
|
||||
['<C-y>'] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
|
||||
['<C-e>'] = cmp.mapping({
|
||||
["<C-b>"] = cmp.mapping(cmp.mapping.scroll_docs(-4), { "i", "c" }),
|
||||
["<C-f>"] = cmp.mapping(cmp.mapping.scroll_docs(4), { "i", "c" }),
|
||||
["<C-Space>"] = cmp.mapping(cmp.mapping.complete(), { "i", "c" }),
|
||||
["<C-y>"] = cmp.config.disable, -- Specify `cmp.config.disable` if you want to remove the default `<C-y>` mapping.
|
||||
["<C-e>"] = cmp.mapping({
|
||||
i = cmp.mapping.abort(),
|
||||
c = cmp.mapping.close(),
|
||||
}),
|
||||
['<CR>'] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
||||
['<C-Tab>'] = cmp.mapping(function(fallback)
|
||||
["<CR>"] = cmp.mapping.confirm({ select = false }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items.
|
||||
["<C-Tab>"] = cmp.mapping(function(fallback)
|
||||
if luasnip.expand_or_jumpable() then
|
||||
luasnip.expand_or_jump()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<C-S-Tab>'] = cmp.mapping(function(fallback)
|
||||
end, { "i", "s" }),
|
||||
["<C-S-Tab>"] = cmp.mapping(function(fallback)
|
||||
if luasnip.jumpable(-1) then
|
||||
luasnip.jump(-1)
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<Tab>'] = cmp.mapping(function(fallback)
|
||||
end, { "i", "s" }),
|
||||
["<Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_next_item()
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
['<S-Tab>'] = cmp.mapping(function(fallback)
|
||||
end, { "i", "s" }),
|
||||
["<S-Tab>"] = cmp.mapping(function(fallback)
|
||||
if cmp.visible() then
|
||||
cmp.select_prev_item()
|
||||
elseif luasnip.jumpable(-1) then
|
||||
@ -152,21 +214,21 @@ cmp.setup({
|
||||
else
|
||||
fallback()
|
||||
end
|
||||
end, { 'i', 's' }),
|
||||
end, { "i", "s" }),
|
||||
},
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'nvim_lsp', priority = 10 },
|
||||
{ name = 'luasnip', priority = 9 }, -- For luasnip users.
|
||||
{ name = 'fuzzy_buffer', priority = 8 },
|
||||
{ name = 'rg', priority = 7 },
|
||||
{ name = 'path', priority = 6 },
|
||||
{ name = 'zsh', priority = 5 },
|
||||
{ name = 'emoji', keyword_length = 2 },
|
||||
{ name = 'neorg' },
|
||||
{ name = 'calc' },
|
||||
{ name = 'npm', keyword_length = 2 },
|
||||
{ name = "nvim_lsp", priority = 10 },
|
||||
{ name = "luasnip", priority = 9 }, -- For luasnip users.
|
||||
{ name = "fuzzy_buffer", priority = 8 },
|
||||
{ name = "rg", priority = 7 },
|
||||
{ name = "path", priority = 6 },
|
||||
{ name = "zsh", priority = 5 },
|
||||
{ name = "emoji", keyword_length = 2 },
|
||||
{ name = "neorg" },
|
||||
{ name = "calc" },
|
||||
{ name = "npm", keyword_length = 2 },
|
||||
{
|
||||
name = 'dictionary',
|
||||
name = "dictionary",
|
||||
keyword_length = 2,
|
||||
},
|
||||
}),
|
||||
@ -176,7 +238,7 @@ cmp.setup({
|
||||
compare.offset,
|
||||
compare.recently_used,
|
||||
compare.exact,
|
||||
require('cmp_fuzzy_buffer.compare'),
|
||||
require("cmp_fuzzy_buffer.compare"),
|
||||
compare.kind,
|
||||
compare.sort_text,
|
||||
compare.length,
|
||||
@ -186,55 +248,55 @@ cmp.setup({
|
||||
})
|
||||
|
||||
-- Git Commit Completions
|
||||
cmp.setup.filetype('gitcommit', {
|
||||
cmp.setup.filetype("gitcommit", {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'conventionalcommits', priority = 20 },
|
||||
{ name = "conventionalcommits", priority = 20 },
|
||||
}),
|
||||
})
|
||||
|
||||
cmp.setup.filetype('NeogitCommitMesssage', {
|
||||
cmp.setup.filetype("NeogitCommitMesssage", {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'conventionalcommits', priority = 20 },
|
||||
{ name = "conventionalcommits", priority = 20 },
|
||||
}),
|
||||
})
|
||||
|
||||
cmp.setup.filetype('toml', {
|
||||
cmp.setup.filetype("toml", {
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'crates' },
|
||||
{ name = "crates" },
|
||||
}),
|
||||
})
|
||||
|
||||
-- Use buffer source for `/` (if you enabled `native_menu`, this won't work anymore).
|
||||
cmp.setup.cmdline('/', {
|
||||
cmp.setup.cmdline("/", {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'fuzzy_buffer' },
|
||||
{ name = 'cmdline_history' },
|
||||
{ name = "fuzzy_buffer" },
|
||||
{ name = "cmdline_history" },
|
||||
}),
|
||||
})
|
||||
|
||||
cmp.setup.cmdline('?', {
|
||||
cmp.setup.cmdline("?", {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'fuzzy_buffer' },
|
||||
{ name = 'cmdline_history' },
|
||||
{ name = "fuzzy_buffer" },
|
||||
{ name = "cmdline_history" },
|
||||
}),
|
||||
})
|
||||
|
||||
cmp.setup.cmdline('@', {
|
||||
cmp.setup.cmdline("@", {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'fuzzy_buffer' },
|
||||
{ name = 'cmdline_history' },
|
||||
{ name = "fuzzy_buffer" },
|
||||
{ name = "cmdline_history" },
|
||||
}),
|
||||
})
|
||||
|
||||
-- Use cmdline & path source for ':' (if you enabled `native_menu`, this won't work anymore).
|
||||
cmp.setup.cmdline(':', {
|
||||
cmp.setup.cmdline(":", {
|
||||
mapping = cmp.mapping.preset.cmdline(),
|
||||
sources = cmp.config.sources({
|
||||
{ name = 'path' },
|
||||
{ name = 'cmdline' },
|
||||
{ name = 'cmdline_history' },
|
||||
{ name = "path" },
|
||||
{ name = "cmdline" },
|
||||
{ name = "cmdline_history" },
|
||||
}),
|
||||
})
|
||||
|
@ -82,6 +82,44 @@ return packer.startup({
|
||||
NeogitDiffDeleteHighlight = { fg = colors.git.removed, bg = colors.diff.delete },
|
||||
NeogitDiffAddHighlight = { fg = colors.git.added, bg = colors.diff.add },
|
||||
NeogitCommitViewHeader = { fg = colors.git.changed, bg = colors.diff.text },
|
||||
menuSel = { bg = "#282C34", fg = "NONE" },
|
||||
Pmenu = { fg = "#C5CDD9", bg = "#22252A" },
|
||||
CmpItemAbbrDeprecated = { fg = "#7E8294", bg = "NONE" },
|
||||
CmpItemAbbrMatch = { fg = "#82AAFF", bg = "NONE" },
|
||||
CmpItemAbbrMatchFuzzy = { fg = "#82AAFF", bg = "NONE" },
|
||||
CmpItemMenu = { fg = "#C792EA", bg = "NONE" },
|
||||
CmpItemKindField = { fg = "#EED8DA", bg = "#B5585F" },
|
||||
CmpItemKindProperty = { fg = "#EED8DA", bg = "#B5585F" },
|
||||
CmpItemKindEvent = { fg = "#EED8DA", bg = "#B5585F" },
|
||||
|
||||
CmpItemKindText = { fg = "#C3E88D", bg = "#9FBD73" },
|
||||
CmpItemKindEnum = { fg = "#C3E88D", bg = "#9FBD73" },
|
||||
CmpItemKindKeyword = { fg = "#C3E88D", bg = "#9FBD73" },
|
||||
|
||||
CmpItemKindConstant = { fg = "#FFE082", bg = "#D4BB6C" },
|
||||
CmpItemKindConstructor = { fg = "#FFE082", bg = "#D4BB6C" },
|
||||
CmpItemKindReference = { fg = "#FFE082", bg = "#D4BB6C" },
|
||||
|
||||
CmpItemKindFunction = { fg = "#EADFF0", bg = "#A377BF" },
|
||||
CmpItemKindStruct = { fg = "#EADFF0", bg = "#A377BF" },
|
||||
CmpItemKindClass = { fg = "#EADFF0", bg = "#A377BF" },
|
||||
CmpItemKindModule = { fg = "#EADFF0", bg = "#A377BF" },
|
||||
CmpItemKindOperator = { fg = "#EADFF0", bg = "#A377BF" },
|
||||
|
||||
CmpItemKindVariable = { fg = "#C5CDD9", bg = "#7E8294" },
|
||||
CmpItemKindFile = { fg = "#C5CDD9", bg = "#7E8294" },
|
||||
|
||||
CmpItemKindUnit = { fg = "#F5EBD9", bg = "#D4A959" },
|
||||
CmpItemKindSnippet = { fg = "#F5EBD9", bg = "#D4A959" },
|
||||
CmpItemKindFolder = { fg = "#F5EBD9", bg = "#D4A959" },
|
||||
|
||||
CmpItemKindMethod = { fg = "#DDE5F5", bg = "#6C8ED4" },
|
||||
CmpItemKindValue = { fg = "#DDE5F5", bg = "#6C8ED4" },
|
||||
CmpItemKindEnumMember = { fg = "#DDE5F5", bg = "#6C8ED4" },
|
||||
|
||||
CmpItemKindInterface = { fg = "#D8EEEB", bg = "#58B5A8" },
|
||||
CmpItemKindColor = { fg = "#D8EEEB", bg = "#58B5A8" },
|
||||
CmpItemKindTypeParameter = { fg = "#D8EEEB", bg = "#58B5A8" },
|
||||
WinSeparator = { fg = "#54546D", bg = "NONE" },
|
||||
},
|
||||
})
|
||||
@ -381,6 +419,7 @@ return packer.startup({
|
||||
"dmitmel/cmp-cmdline-history",
|
||||
"David-Kunz/cmp-npm",
|
||||
"lukas-reineke/cmp-rg",
|
||||
"onsails/lspkind.nvim",
|
||||
},
|
||||
config = function()
|
||||
require("plugins.configs._cmp")
|
||||
|
Loading…
Reference in New Issue
Block a user