let
selectOpts = "{behavior = cmp.SelectBehavior.Select}";
in
{
enable = true;
settings = {
autoEnableSources = true;
performance = {
debounce = 150;
};
sources = [
{ name = "path"; }
{
name = "nvim_lsp";
keywordLength = 1;
}
{
name = "buffer";
keywordLength = 3;
}
];
snippet.expand = "function(args) require('luasnip').lsp_expand(args.body) end";
formatting = {
fields = [
"menu"
"abbr"
"kind"
];
format = ''
function(entry, item)
local menu_icon = {
nvim_lsp = '[LSP]',
luasnip = '[SNIP]',
buffer = '[BUF]',
path = '[PATH]',
}
item.menu = menu_icon[entry.source.name]
return item
end
'';
};
window = {
completion = {
border = "rounded";
winhighlight = "Normal:Normal,FloatBorder:Normal,CursorLine:Visual,Search:None";
zindex = 1001;
scrolloff = 0;
colOffset = 0;
sidePadding = 1;
scrollbar = true;
};
documentation = {
border = "rounded";
winhighlight = "Normal:Normal,FloatBorder:Normal,CursorLine:Visual,Search:None";
zindex = 1001;
maxHeight = 20;
};
};
};
settings.mapping = {
"<Up>" = "cmp.mapping.select_prev_item(${selectOpts})";
"<Down>" = "cmp.mapping.select_next_item(${selectOpts})";
"<C-p>" = "cmp.mapping.select_prev_item(${selectOpts})";
"<C-n>" = "cmp.mapping.select_next_item(${selectOpts})";
"<C-u>" = "cmp.mapping.scroll_docs(-4)";
"<C-d>" = "cmp.mapping.scroll_docs(4)";
"<C-e>" = "cmp.mapping.abort()";
"<C-y>" = "cmp.mapping.confirm({select = true})";
"<CR>" = "cmp.mapping.confirm({select = false})";
"<C-f>" = ''
cmp.mapping(
function(fallback)
if luasnip.jumpable(1) then
luasnip.jump(1)
else
fallback()
end
end,
{ "i", "s" }
)
'';
"<C-b>" = ''
cmp.mapping(
function(fallback)
if luasnip.jumpable(-1) then
luasnip.jump(-1)
else
fallback()
end
end,
{ "i", "s" }
)
'';
"<Tab>" = ''
cmp.mapping(
function(fallback)
local col = vim.fn.col('.') - 1
if cmp.visible() then
cmp.select_next_item(select_opts)
elseif col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') then
fallback()
else
cmp.complete()
end
end,
{ "i", "s" }
)
'';
"<S-Tab>" = ''
cmp.mapping(
function(fallback)
if cmp.visible() then
cmp.select_prev_item(select_opts)
else
fallback()
end
end,
{ "i", "s" }
)
'';
};
}