aboutsummaryrefslogtreecommitdiff
path: root/lua/kickstart/plugins/cmp.lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua/kickstart/plugins/cmp.lua')
-rw-r--r--lua/kickstart/plugins/cmp.lua118
1 files changed, 118 insertions, 0 deletions
diff --git a/lua/kickstart/plugins/cmp.lua b/lua/kickstart/plugins/cmp.lua
new file mode 100644
index 0000000..e9ed483
--- /dev/null
+++ b/lua/kickstart/plugins/cmp.lua
@@ -0,0 +1,118 @@
+return {
+ { -- Autocompletion
+ 'hrsh7th/nvim-cmp',
+ event = 'InsertEnter',
+ dependencies = {
+ -- Snippet Engine & its associated nvim-cmp source
+ {
+ 'L3MON4D3/LuaSnip',
+ 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',
+
+ -- 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',
+ },
+ config = function()
+ -- See `:help cmp`
+ local cmp = require 'cmp'
+ local luasnip = require 'luasnip'
+ luasnip.config.setup {}
+
+ cmp.setup {
+ snippet = {
+ expand = function(args)
+ luasnip.lsp_expand(args.body)
+ end,
+ },
+ completion = { completeopt = 'menu,menuone,noinsert' },
+
+ -- 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 {
+ -- Select the [n]ext item
+ ['<C-n>'] = cmp.mapping.select_next_item(),
+ -- Select the [p]revious item
+ ['<C-p>'] = cmp.mapping.select_prev_item(),
+
+ -- Scroll the documentation window [b]ack / [f]orward
+ ['<C-b>'] = cmp.mapping.scroll_docs(-4),
+ ['<C-f>'] = cmp.mapping.scroll_docs(4),
+
+ -- Accept ([y]es) the completion.
+ -- This will auto-import if your LSP supports it.
+ -- 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, { 'i', 's' }),
+ ['<C-h>'] = cmp.mapping(function()
+ if luasnip.locally_jumpable(-1) then
+ luasnip.jump(-1)
+ end
+ end, { 'i', 's' }),
+
+ -- For more advanced Luasnip keymaps (e.g. selecting choice nodes, expansion) see:
+ -- https://github.com/L3MON4D3/LuaSnip?tab=readme-ov-file#keymaps
+ },
+ sources = {
+ {
+ name = 'lazydev',
+ -- set group index to 0 to skip loading LuaLS completions as lazydev recommends it
+ group_index = 0,
+ },
+ { name = 'nvim_lsp' },
+ { name = 'luasnip' },
+ { name = 'path' },
+ },
+ }
+ end,
+ },
+}
+-- vim: ts=2 sts=2 sw=2 et