diff --git a/homeConfig/dotfiles/nvim/lua/config/autocmds.lua b/homeConfig/dotfiles/nvim/lua/config/autocmds.lua index 26aeca2..fc2e4d4 100644 --- a/homeConfig/dotfiles/nvim/lua/config/autocmds.lua +++ b/homeConfig/dotfiles/nvim/lua/config/autocmds.lua @@ -50,33 +50,59 @@ vim.cmd([[ au BufRead,BufNewFile *.purs set filetype=purescript ]]) +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 luasnip = require("luasnip") cmp.setup({ mapping = { + -- [""] = cmp.mapping(function(fallback) + -- if vim.fn.pumvisible() == 1 then + -- vim.fn.feedkeys(vim.api.nvim_replace_termcodes("", true, true, true), "n") + -- elseif luasnip.expand_or_jumpable() then + -- vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") + -- else + -- fallback() + -- end + -- end, { "i", "s" }), + + -- [""] = cmp.mapping(function(fallback) + -- if vim.fn.pumvisible() == 1 then + -- vim.fn.feedkeys(vim.api.nvim_replace_termcodes("", true, true, true), "n") + -- elseif luasnip.jumpable(-1) then + -- vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") + -- else + -- fallback() + -- end + -- end, { "i", "s" }), + [""] = cmp.mapping(function(fallback) - if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes("", true, true, true), "n") + if cmp.visible() then + cmp.select_next_item() + -- You could replace the expand_or_jumpable() calls with expand_or_locally_jumpable() + -- they way you will only jump inside the snippet region elseif luasnip.expand_or_jumpable() then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-expand-or-jump", true, true, true), "") + luasnip.expand_or_jump() + elseif has_words_before() then + cmp.complete() else fallback() end end, { "i", "s" }), [""] = cmp.mapping(function(fallback) - if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes("", true, true, true), "n") + if cmp.visible() then + cmp.select_prev_item() elseif luasnip.jumpable(-1) then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes("luasnip-jump-prev", true, true, true), "") + luasnip.jump(-1) else fallback() end end, { "i", "s" }), - - -- [""] = cmp.mapping(function(fallback) - -- fallback() - -- end, { "i", "s" }), [""] = cmp.mapping({ i = function(fallback) if cmp.visible() and cmp.get_active_entry() then