Closed Elite-zx closed 2 weeks ago
In my setup, snippet and completion have separate keymaps.
That said, maybe this could help you get started.
local opts = { noremap = true, expr = true, silent = true }
-- because or opts.expr we gotta return something
vim.keymap.set("i", "<Tab>", function()
if vim.fn["coc#pum#visible"]() == 1 then
return vim.fn["coc#pum#next"](1)
elseif vim.fn["coc#expandableOrJumpable"]() then
return "<Plug>(coc-snippets-expand-jump)"
else
return "<C-i>"
end
end, opts)
vim.keymap.set("i", "<S-Tab>", function()
if vim.fn["coc#pum#visible"]() == 1 then
return vim.fn["coc#pum#prev"](1)
elseif vim.fn["coc#jumpable"]() then
return vim.fn["coc#snippet#prev"]() --> this turns into <Ignore> when the keymap runs
elseif vim.fn.indent(vim.fn.line(".")) == vim.fn.col(".") - 1 then
return "<C-d>"
else
return "<C-w>"
end
end, opts)
vim.keymap.set("i", "<CR>", function()
if vim.fn["coc#pum#visible"]() == 1 then
vim.fn["coc#pum#close"]("confirm")
else
vim.api.nvim_feedkeys(vim.keycode("<C-m>"), "n", false)
vim.fn["coc#on_enter"]()
end
end, { noremap = true, silent = true })
-- This might be useful since some snippets sometimes add text before the
-- cursor and that might influence completion
vim.keymap.set("i", "<C-Space>", function()
if vim.fn["coc#pum#visible"]() == 1 then
vim.fn["coc#pum#close"]()
else
vim.fn["coc#start"]()
end
end, { noremap = true, silent = true })
I expect the following functionality when pressing the Tab key:
Trigger completion, navigate to the next completion item, and select it by pressing Enter. After selecting a completion, pressing Tab should navigate to the next placeholder. I have the following references:
The content of coc-snippets' README
The content of coc.nvim's README
However, I am not sure how to combine these two configurations to achieve my goal. Thank you.
Vim verison: VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Mar 1 2021 16:57:56)
The following is my current configuration for cocnvim: