diff options
author | Justine Smithies <justine@smithies.me.uk> | 2024-01-07 20:55:53 +0000 |
---|---|---|
committer | Justine Smithies <justine@smithies.me.uk> | 2024-01-07 20:55:53 +0000 |
commit | 7faa540b3817cc4653267c70aa71c6b5460899a6 (patch) | |
tree | 0261e723b9ad9604dc461859afa21a7f6beaf1c2 | |
parent | b5cd477cb91bf52b90a765a2dab0f9738ac4563c (diff) |
Add Super-Tab mapping to nvim cmp
-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' }, |