]> git.rmz.io Git - dotfiles.git/commitdiff
nvim/coding: setup Supertab
authorSamir Benmendil <me@rmz.io>
Wed, 12 Apr 2023 16:02:42 +0000 (17:02 +0100)
committerSamir Benmendil <me@rmz.io>
Sun, 17 Dec 2023 17:36:19 +0000 (17:36 +0000)
Pretty much copied from [lazyvim#supertab]. It doesn't exactly work as I
want though. It seems that <tab> selects the second entry rather than
completes the first first.

[lazyvim#supertab]: https://www.lazyvim.org/configuration/recipes#supertab

nvim/lua/plugins/coding.lua [new file with mode: 0644]

diff --git a/nvim/lua/plugins/coding.lua b/nvim/lua/plugins/coding.lua
new file mode 100644 (file)
index 0000000..6e8adc9
--- /dev/null
@@ -0,0 +1,53 @@
+---@type LazyPluginSpec
+return {
+  -- snippets
+  {
+    "L3MON4D3/LuaSnip",
+    -- disable luasnip bindings for <tab> and <s-tab>
+    keys = function()
+      return {}
+    end,
+  },
+
+  -- auto completion
+  {
+    "hrsh7th/nvim-cmp",
+    opts = function(_, opts)
+      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
+
+      local cmp = require("cmp")
+      local luasnip = require("luasnip")
+
+      opts.completion = vim.tbl_extend("force", opts.completion, {
+        completeopt = "menu,menuone,noinsert",
+      })
+      --TODO: review if I want to keep any of LazyVim's mappings
+      opts.mapping = vim.tbl_extend("force", opts.mapping, {
+        ["<Tab>"] = cmp.mapping(function(fallback)
+          if cmp.visible() then
+            cmp.select_next_item()
+          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" }),
+      })
+    end,
+  },
+}