From 7faa540b3817cc4653267c70aa71c6b5460899a6 Mon Sep 17 00:00:00 2001 From: Justine Smithies Date: Sun, 7 Jan 2024 20:55:53 +0000 Subject: Add Super-Tab mapping to nvim cmp --- .config/nvim/lua/pluginsconfig/nvim-cmp.lua | 33 +++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) (limited to '.config/nvim') 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 [''] = cmp.mapping.complete(), [''] = cmp.mapping.abort(), [''] = cmp.mapping.confirm({ select = true }), -- Accept currently selected item. Set `select` to `false` to only confirm explicitly selected items. + [""] = 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" }), + + [""] = 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' }, -- cgit v1.2.3