nvim-config/lua/configs/cmp.lua

133 lines
2.7 KiB
Lua
Raw Permalink Normal View History

2022-03-01 02:58:43 +00:00
local M = {}
function M.config()
2023-01-10 18:21:09 +00:00
local cmp_status_ok, cmp = pcall(require, 'cmp')
2022-03-01 02:58:43 +00:00
if not cmp_status_ok then
return
end
2023-01-10 18:21:09 +00:00
local snip_status_ok, luasnip = pcall(require, 'luasnip')
2022-03-01 02:58:43 +00:00
if not snip_status_ok then
return
end
local check_backspace = function()
2023-01-10 18:21:09 +00:00
local col = vim.fn.col('.') - 1
return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s')
2022-03-01 02:58:43 +00:00
end
local kind_icons = {
2023-01-10 18:21:09 +00:00
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 = '',
2022-03-01 02:58:43 +00:00
}
2023-01-10 18:21:09 +00:00
cmp.setup({
2022-03-01 02:58:43 +00:00
formatting = {
fields = { 'menu', 'kind', 'abbr' },
format = function(entry, item)
local menu_icons = {
nvim_lsp = 'λ',
buffer = 'Ω',
path = '🖫',
}
item.menu = menu_icons[entry.source.name]
item.kind = kind_icons[item.kind]
return item
2022-03-01 02:58:43 +00:00
end,
},
snippet = {
expand = function(args)
luasnip.lsp_expand(args.body)
end,
},
confirm_opts = {
behavior = cmp.ConfirmBehavior.Replace,
select = false,
},
experimental = {
ghost_text = false,
},
window = {
completion = {
scrolloff = 1,
},
2022-03-01 02:58:43 +00:00
},
2024-03-13 22:48:31 +00:00
preselect = cmp.PreselectMode.None,
2022-03-01 02:58:43 +00:00
completion = {
keyword_length = 1,
},
sources = {
{ name = 'nvim_lsp', group_index = 1 },
2022-03-01 07:49:46 +00:00
--{ name = "luasnip" },
{ name = 'buffer', group_index = 2 },
2023-01-10 18:21:09 +00:00
{ name = 'path' },
2022-03-01 02:58:43 +00:00
},
mapping = {
2023-01-10 18:21:09 +00:00
['<C-k>'] = cmp.mapping.select_prev_item(),
['<C-j>'] = cmp.mapping.select_next_item(),
['<C-d>'] = cmp.mapping(cmp.mapping.scroll_docs(-1), { 'i', 'c' }),
['<C-f>'] = cmp.mapping(cmp.mapping.scroll_docs(1), { 'i', 'c' }),
['<C-Space>'] = cmp.mapping(cmp.mapping.complete(), { 'i', 'c' }),
['<C-y>'] = cmp.config.disable,
['<C-e>'] = cmp.mapping({
2022-03-01 02:58:43 +00:00
i = cmp.mapping.abort(),
c = cmp.mapping.close(),
2023-01-10 18:21:09 +00:00
}),
['<CR>'] = cmp.mapping.confirm({ select = false }),
['<Tab>'] = cmp.mapping(function(fallback)
2022-03-01 02:58:43 +00:00
if cmp.visible() then
cmp.select_next_item()
elseif luasnip.expandable() then
luasnip.expand()
elseif luasnip.expand_or_jumpable() then
luasnip.expand_or_jump()
elseif check_backspace() then
fallback()
else
fallback()
end
end, {
2023-01-10 18:21:09 +00:00
'i',
's',
2022-03-01 02:58:43 +00:00
}),
2023-01-10 18:21:09 +00:00
['<S-Tab>'] = cmp.mapping(function(fallback)
2022-03-01 02:58:43 +00:00
if cmp.visible() then
cmp.select_prev_item()
elseif luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end, {
2023-01-10 18:21:09 +00:00
'i',
's',
2022-03-01 02:58:43 +00:00
}),
},
2023-01-10 18:21:09 +00:00
})
2022-03-01 02:58:43 +00:00
end
return M