diff options
Diffstat (limited to '.config/nvim/lua/pluginsconfig/nvim-cmp.lua')
-rw-r--r-- | .config/nvim/lua/pluginsconfig/nvim-cmp.lua | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/.config/nvim/lua/pluginsconfig/nvim-cmp.lua b/.config/nvim/lua/pluginsconfig/nvim-cmp.lua index 4252705..e7b0ea9 100644 --- a/.config/nvim/lua/pluginsconfig/nvim-cmp.lua +++ b/.config/nvim/lua/pluginsconfig/nvim-cmp.lua @@ -1,10 +1,16 @@ - -- Setup nvim-cmp. - local present, cmp = pcall(require, 'cmp') +-- Setup nvim-cmp. +local present, cmp = pcall(require, 'cmp') if not present then return end +local has_words_before = function() + unpack = unpack or table.unpack + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col ~= 0 and vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match("%s") == nil +end + cmp.setup({ snippet = { -- REQUIRED - you must specify a snippet engine @@ -35,6 +41,29 @@ end ['<C-Space>'] = cmp.mapping.complete(), ['<C-e>'] = cmp.mapping.abort(), ['<CR>'] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + ["<Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_next_item() + -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() + -- that way you will only jump inside the snippet region + -- elseif luasnip.expand_or_jumpable() then + -- luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() + else + fallback() + end + end, { "i", "s" }), + + ["<S-Tab>"] = cmp.mapping(function(fallback) + if cmp.visible() then + cmp.select_prev_item() + elseif luasnip.jumpable(-1) then + luasnip.jump(-1) + else + fallback() + end + end, { "i", "s" }), }), sources = cmp.config.sources({ { name = 'nvim_lsp' }, |