aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustine Smithies <justine@smithies.me.uk>2024-01-07 20:55:53 +0000
committerJustine Smithies <justine@smithies.me.uk>2024-01-07 20:55:53 +0000
commit7faa540b3817cc4653267c70aa71c6b5460899a6 (patch)
tree0261e723b9ad9604dc461859afa21a7f6beaf1c2
parentb5cd477cb91bf52b90a765a2dab0f9738ac4563c (diff)
Add Super-Tab mapping to nvim cmp
-rw-r--r--.config/nvim/lua/pluginsconfig/nvim-cmp.lua33
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' },