From 8e643a37f78d3da2a6016f62a2d276a03666dcc1 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Mon, 1 Nov 2021 17:55:53 +0200 Subject: [PATCH] fix: setup luasnip to work with cmp --- lua/config/cmp.lua | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/lua/config/cmp.lua b/lua/config/cmp.lua index 550fc55..cf582ce 100644 --- a/lua/config/cmp.lua +++ b/lua/config/cmp.lua @@ -3,6 +3,12 @@ local lspkind = require('lspkind') lspkind.init() local cmp = require('cmp') +local luasnip = require("luasnip") + +local has_words_before = function() + 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{ completion = { completeopt = 'menu,menuone,noinsert' }, @@ -12,8 +18,6 @@ cmp.setup{ end, }, mapping = { - -- [''] = cmp.mapping.select_next_item({ behavior = cmp.SelectBehavior.Insert }), - -- [''] = cmp.mapping.select_prev_item({ behavior = cmp.SelectBehavior.Insert }), [''] = cmp.mapping.scroll_docs(-4), [''] = cmp.mapping.scroll_docs(4), [''] = cmp.mapping.complete(), @@ -21,7 +25,29 @@ cmp.setup{ [''] = cmp.mapping.confirm({ behavior = cmp.ConfirmBehavior.Insert, select = true, - }) + }), + + [""] = 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" }), + + [""] = 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 = { { name = 'emoji', max_item_count = 10, keyword_length = 5 }, @@ -53,7 +79,6 @@ cmp.setup{ } } - -- Use buffer source for `/`. cmp.setup.cmdline('/', { sources = {