refactor: pick the nvim-cmp config from the kickstart config

This commit is contained in:
Dinesh Salunke 2025-04-06 14:47:26 +05:30
parent 30750acbc2
commit bb2c9b065a

View File

@ -1,113 +1,118 @@
return { return { -- Autocompletion
{
"hrsh7th/nvim-cmp", "hrsh7th/nvim-cmp",
version = false,
event = "InsertEnter", event = "InsertEnter",
dependencies = { dependencies = {
"hrsh7th/cmp-nvim-lsp", -- Snippet Engine & its associated nvim-cmp source
"hrsh7th/cmp-buffer", {
"hrsh7th/cmp-nvim-lua", "L3MON4D3/LuaSnip",
"hrsh7th/cmp-path", build = (function()
-- Build Step is needed for regex support in snippets.
-- This step is not supported in many windows environments.
-- Remove the below condition to re-enable on windows.
if vim.fn.has("win32") == 1 or vim.fn.executable("make") == 0 then
return
end
return "make install_jsregexp"
end)(),
dependencies = {
-- `friendly-snippets` contains a variety of premade snippets.
-- See the README about individual language/framework/plugin snippets:
-- https://github.com/rafamadriz/friendly-snippets
-- {
-- 'rafamadriz/friendly-snippets',
-- config = function()
-- require('luasnip.loaders.from_vscode').lazy_load()
-- end,
-- },
},
},
"saadparwaiz1/cmp_luasnip", "saadparwaiz1/cmp_luasnip",
-- Adds other completion capabilities.
-- nvim-cmp does not ship with all sources by default. They are split
-- into multiple repos for maintenance purposes.
"hrsh7th/cmp-nvim-lsp",
"hrsh7th/cmp-path",
"hrsh7th/cmp-nvim-lsp-signature-help", "hrsh7th/cmp-nvim-lsp-signature-help",
"onsails/lspkind.nvim",
}, },
config = function() config = function()
vim.api.nvim_set_hl(0, "CmpGhostText", { link = "Comment", default = true }) -- See `:help cmp`
local luasnip = require("luasnip")
local cmp = require("cmp") local cmp = require("cmp")
local luasnip = require("luasnip")
luasnip.config.setup({})
local border_opts = {
border = {
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
{ "", "CmpDocBorder" },
},
winhighlight = "Normal:Normal,FloatBorder:FloatBorder,CursorLine:Visual,Search:None",
}
---@diagnostic disable: missing-fields
cmp.setup({ cmp.setup({
formatting = {
preselect = cmp.PreselectMode.None,
fields = {
"abbr",
"kind",
"menu",
},
format = require("lspkind").cmp_format({
mode = "symbol_text",
maxwidth = 150,
ellipsis_char = "...",
before = function(entry, vim_item)
vim_item.menu = ({
nvim_lsp = "[LSP]",
buffer = "[Buffer]",
})[entry.source.name]
return vim_item
end,
}),
},
completion = {
completeopt = "menu,menuone,noinsert",
},
snippet = { snippet = {
expand = function(args) expand = function(args)
luasnip.lsp_expand(args.body) luasnip.lsp_expand(args.body)
end, end,
}, },
view = { completion = { completeopt = "menu,menuone,noinsert" },
docs = {
auto_open = true, -- For an understanding of why these mappings were
}, -- chosen, you will need to read `:help ins-completion`
}, --
-- No, but seriously. Please read `:help ins-completion`, it is really good!
mapping = cmp.mapping.preset.insert({ mapping = cmp.mapping.preset.insert({
-- Select the [n]ext item
["<C-j>"] = cmp.mapping.select_next_item(), ["<C-j>"] = cmp.mapping.select_next_item(),
-- Select the [p]revious item
["<C-k>"] = cmp.mapping.select_prev_item(), ["<C-k>"] = cmp.mapping.select_prev_item(),
["<C-Space>"] = cmp.mapping.complete(),
["<C-e>"] = cmp.mapping.abort(), -- Scroll the documentation window [b]ack / [f]orward
["<CR>"] = cmp.mapping.confirm({ behavior = cmp.SelectBehavior.Replace, select = true }), ["<C-b>"] = cmp.mapping.scroll_docs(-4),
["<Tab>"] = cmp.mapping(function(fallback) ["<C-f>"] = cmp.mapping.scroll_docs(4),
if cmp.visible() then
cmp.select_next_item() -- Accept ([y]es) the completion.
else -- This will auto-import if your LSP supports it.
fallback() -- This will expand snippets if the LSP sent a snippet.
-- ["<C-y>"] = cmp.mapping.confirm({ select = true }),
-- If you prefer more traditional completion keymaps,
-- you can uncomment the following lines
["<CR>"] = cmp.mapping.confirm({ select = true }),
--['<Tab>'] = cmp.mapping.select_next_item(),
--['<S-Tab>'] = cmp.mapping.select_prev_item(),
-- Manually trigger a completion from nvim-cmp.
-- Generally you don't need this, because nvim-cmp will display
-- completions whenever it has completion options available.
["<C-Space>"] = cmp.mapping.complete({}),
-- Think of <c-l> as moving to the right of your snippet expansion.
-- So if you have a snippet that's like:
-- function $name($args)
-- $body
-- end
--
-- <c-l> will move you to the right of each of the expansion locations.
-- <c-h> is similar, except moving you backwards.
["<C-l>"] = cmp.mapping(function()
if luasnip.expand_or_locally_jumpable() then
luasnip.expand_or_jump()
end end
end, { "i", "s" }), end, { "i", "s" }),
["<S-Tab>"] = cmp.mapping(function(fallback) ["<C-h>"] = cmp.mapping(function()
if cmp.visible() then if luasnip.locally_jumpable(-1) then
cmp.select_prev_item() luasnip.jump(-1)
else
fallback()
end end
end, { "i", "s" }), end, { "i", "s" }),
["<C-d>"] = function()
if cmp.visible_docs() then -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
cmp.close_docs() -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
else
cmp.open_docs()
end
end,
}), }),
sources = cmp.config.sources({ sources = {
{
name = "lazydev",
-- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
group_index = 0,
},
{ name = "nvim_lsp" }, { name = "nvim_lsp" },
{ name = "nvim_lsp_signature_help" }, { name = "nvim_lsp_signature_help" },
{ name = "luasnip" }, { name = "luasnip" },
{ name = "buffer" },
{ name = "path" }, { name = "path" },
}), { name = "nvim_lsp_signature_help" },
window = {
scrollbar = false,
completion = cmp.config.window.bordered(border_opts),
documentation = cmp.config.window.bordered(border_opts),
}, },
}) })
---@diagnostic enable: missing-fields
end, end,
},
} }