From ae54dcdc490a2851b5b0f392adf19b4cfff2b901 Mon Sep 17 00:00:00 2001 From: Iron-E <36409591+Iron-E@users.noreply.github.com> Date: Wed, 8 Sep 2021 22:12:22 -0400 Subject: [PATCH] Reduce use of VimL (#168) * perf(context): reduce use of `cmd` and `fn` * perf(float): reduce use of `cmd` and `fn` * perf(init): reduce use of `cmd` and `fn` * perf(menu): reduce use of `cmd` and `fn` * perf(plugin): reduce use of `cmd` and `fn` * docs(README): reduce use of `cmd` and `fn` --- README.md | 18 +++++++++--------- lua/cmp/context.lua | 5 +++-- lua/cmp/float.lua | 2 +- lua/cmp/init.lua | 4 ++-- lua/cmp/menu.lua | 9 +++++---- plugin/cmp.lua | 4 ++-- 6 files changed, 22 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index f551e58..0b0af2e 100644 --- a/README.md +++ b/README.md @@ -174,18 +174,18 @@ You can specify your own custom mapping function. ```lua local check_back_space = function() - local col = vim.fn.col('.') - 1 - return col == 0 or vim.fn.getline('.'):sub(col, col):match('%s') + local line, col = unpack(vim.api.nvim_win_get_cursor(0)) + return col == 0 or vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1]:sub(col, col):match('%s') ~= nil end mapping = { [''] = function(fallback) if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n') + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n', true) elseif check_back_space() then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n') + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('', true, true, true), 'n', true) elseif vim.fn['vsnip#available']() == 1 then - vim.fn.feedkeys(vim.api.nvim_replace_termcodes('(vsnip-expand-or-jump)', true, true, true), '') + vim.api.nvim_feedkeys(vim.api.nvim_replace_termcodes('(vsnip-expand-or-jump)', true, true, true), '', true) else fallback() end @@ -496,9 +496,9 @@ end mapping = { [""] = cmp.mapping(function(fallback) if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(t(""), "n") + vim.api.nvim_feedkeys(t(""), "n", true) elseif luasnip.expand_or_jumpable() then - vim.fn.feedkeys(t("luasnip-expand-or-jump"), "") + vim.api.nvim_feedkeys(t("luasnip-expand-or-jump"), "", true) else fallback() end @@ -508,9 +508,9 @@ mapping = { }), [""] = cmp.mapping(function(fallback) if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(t(""), "n") + vim.api.nvim_feedkeys(t(""), "n", true) elseif luasnip.jumpable(-1) then - vim.fn.feedkeys(t("luasnip-jump-prev"), "") + vim.api.nvim_feedkeys(t("luasnip-jump-prev"), "", true) else fallback() end diff --git a/lua/cmp/context.lua b/lua/cmp/context.lua index ec99409..c7de4e5 100644 --- a/lua/cmp/context.lua +++ b/lua/cmp/context.lua @@ -55,8 +55,9 @@ context.new = function(prev_context, option) self.cursor_line = vim.api.nvim_get_current_line() self.virtcol = vim.fn.virtcol('.') self.cursor = {} - self.cursor.row = vim.api.nvim_win_get_cursor(0)[1] - self.cursor.col = vim.api.nvim_win_get_cursor(0)[2] + 1 + local cursor = vim.api.nvim_win_get_cursor(0) + self.cursor.row = cursor[1] + self.cursor.col = cursor[2] + 1 self.cursor.line = self.cursor.row - 1 self.cursor.character = misc.to_utfindex(self.cursor_line, self.cursor.col) self.cursor_before_line = string.sub(self.cursor_line, 1, self.cursor.col - 1) diff --git a/lua/cmp/float.lua b/lua/cmp/float.lua index b232d4b..0e7e242 100644 --- a/lua/cmp/float.lua +++ b/lua/cmp/float.lua @@ -125,7 +125,7 @@ float.scroll = function(self, delta) vim.defer_fn(function() vim.api.nvim_buf_call(buf, function() - vim.cmd('normal! ' .. top .. 'zt') + vim.api.nvim_command('normal! ' .. top .. 'zt') end) end, 0) end diff --git a/lua/cmp/init.lua b/lua/cmp/init.lua index 3dfdc21..11039cb 100644 --- a/lua/cmp/init.lua +++ b/lua/cmp/init.lua @@ -63,7 +63,7 @@ end ---Select next item if possible cmp.select_next_item = function() if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(keymap.t(''), 'n') + vim.api.nvim_feedkeys(keymap.t(''), 'n', true) return true else return false @@ -73,7 +73,7 @@ end ---Select prev item if possible cmp.select_prev_item = function() if vim.fn.pumvisible() == 1 then - vim.fn.feedkeys(keymap.t(''), 'n') + vim.api.nvim_feedkeys(keymap.t(''), 'n', true) return true else return false diff --git a/lua/cmp/menu.lua b/lua/cmp/menu.lua index 981f13e..abe3919 100644 --- a/lua/cmp/menu.lua +++ b/lua/cmp/menu.lua @@ -48,7 +48,8 @@ menu.close = function(self) debug.log('menu.close', vim.fn.pumvisible()) if vim.fn.pumvisible() == 1 then -- TODO: Is it safe to call...? - vim.fn.complete(#vim.fn.getline('.') + 1, {}) + local line = vim.api.nvim_win_get_cursor(0)[1] + vim.fn.complete(#vim.api.nvim_buf_get_lines(0, line - 1, line, true)[1] + 1, {}) end self:unselect() end) @@ -162,15 +163,15 @@ menu.show = function(self) local completeopt = vim.o.completeopt if self.preselect == 1 then - vim.cmd('set completeopt=menuone,noinsert') + vim.opt.completeopt = {'menuone', 'noinsert'} else - vim.cmd('set completeopt=' .. config.get().completion.completeopt) + vim.opt.completeopt = config.get().completion.completeopt end vim.fn.complete(self.offset, self.items) if self.preselect > 1 then vim.api.nvim_select_popupmenu_item(self.preselect - 1, false, false, {}) end - vim.cmd('set completeopt=' .. completeopt) + vim.opt.completeopt = completeopt end ---Select current item diff --git a/plugin/cmp.lua b/plugin/cmp.lua index 4deece0..8660858 100644 --- a/plugin/cmp.lua +++ b/plugin/cmp.lua @@ -16,10 +16,10 @@ vim.cmd [[ ]] if vim.fn.hlexists('CmpDocumentation') == 0 then - vim.cmd [[highlight link CmpDocumentation NormalFloat]] + vim.api.nvim_command [[highlight link CmpDocumentation NormalFloat]] end if vim.fn.hlexists('CmpDocumentationBorder') == 0 then - vim.cmd [[highlight link CmpDocumentationBorder NormalFloat]] + vim.api.nvim_command [[highlight link CmpDocumentationBorder NormalFloat]] end