You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
2.0 KiB
59 lines
2.0 KiB
-- Credit to https://rsdlt.github.io/ for this code. |
|
|
|
local cmp = require'cmp' |
|
|
|
cmp.setup({ |
|
-- Enable LSP snippets |
|
snippet = { |
|
expand = function(args) |
|
vim.fn["vsnip#anonymous"](args.body) |
|
end, |
|
}, |
|
mapping = { |
|
['<C-p>'] = cmp.mapping.select_prev_item(), |
|
['<C-n>'] = cmp.mapping.select_next_item(), |
|
-- Add tab support |
|
['<S-Tab>'] = cmp.mapping.select_prev_item(), |
|
['<Tab>'] = cmp.mapping.select_next_item(), |
|
['<C-S-f>'] = cmp.mapping.scroll_docs(-4), |
|
['<C-f>'] = cmp.mapping.scroll_docs(4), |
|
['<C-Space>'] = cmp.mapping.complete(), |
|
['<C-e>'] = cmp.mapping.close(), |
|
['<CR>'] = cmp.mapping.confirm({ |
|
behavior = cmp.ConfirmBehavior.Insert, |
|
select = true, |
|
}) |
|
}, |
|
-- Installed sources: |
|
sources = { |
|
{ name = 'path' }, -- file paths |
|
{ name = 'nvim_lsp', keyword_length = 3 }, -- from language server |
|
{ name = 'nvim_lsp_signature_help'}, -- display function signatures with current parameter emphasized |
|
{ name = 'nvim_lua', keyword_length = 2}, -- complete neovim's Lua runtime API such vim.lsp.* |
|
{ name = 'buffer', keyword_length = 2 }, -- source current buffer |
|
{ name = 'vsnip', keyword_length = 2 }, -- nvim-cmp source for vim-vsnip |
|
{ name = 'calc'}, -- source for math calculation |
|
}, |
|
window = { |
|
completion = cmp.config.window.bordered(), |
|
documentation = cmp.config.window.bordered(), |
|
}, |
|
formatting = { |
|
fields = {'menu', 'abbr', 'kind'}, |
|
format = function(entry, item) |
|
local menu_icon ={ |
|
nvim_lsp = 'λ', |
|
vsnip = '⋗', |
|
buffer = 'Ω', |
|
path = '•', |
|
} |
|
item.menu = menu_icon[entry.source.name] |
|
return item |
|
end, |
|
}, |
|
-- This will let enter work like expected and tab can be used to pick a suggestion. |
|
preselect = cmp.PreselectMode.None |
|
}) |
|
|
|
-- This also prevents enter from selecting the first suggestion. |
|
vim.o.completeopt = "menuone,noselect,preview"
|
|
|