mirror of
https://github.com/neovim/neovim.git
synced 2026-04-25 16:54:12 +00:00
feat(snippet): set snippet keymaps permanent instead of dynamic (#31887)
Problem:
Given that `vim.snippet.expand()` sets temporary `<tab>`/`<s-tab>`
keymaps there is no way to build "smart-tab" functionality where `<tab>`
chooses the next completion candidate if the popup menu is visible.
Solution:
Set the keymap permanent in `_defaults`.
The downside of this approach is that users of multiple snippet engine's
need to adapt their keymaps to handle all their engines that are in use.
For example:
vim.keymap.set({ 'i', 's' }, "<Tab>", function()
if foreign_snippet.active() then
return "<Cmd>lua require('foreign_snippet').jump()<CR>"
elseif vim.snippet.active({ direction = 1 }) then
return "<Cmd>lua vim.snippet.jump(1)<CR>"
else
return key
end
end, { expr = true })
Upside is that using `vim.keymap.set` to override keymaps is a well
established pattern and `vim.snippet.expand` calls made by nvim itself
or plugins have working keymaps out of the box.
Co-authored-by: Maria José Solano <majosolano99@gmail.com>
This commit is contained in:
committed by
GitHub
parent
6401b433f7
commit
123f8d229e
@@ -1241,7 +1241,9 @@ describe('vim.lsp.completion: integration', function()
|
||||
}
|
||||
end)
|
||||
)
|
||||
feed('<tab>')
|
||||
exec_lua(function()
|
||||
vim.snippet.jump(1)
|
||||
end)
|
||||
eq(
|
||||
#'hello friends',
|
||||
exec_lua(function()
|
||||
|
||||
Reference in New Issue
Block a user