主要现象
当使用LuaSnip生成片段时,即使切换过VIM模式,输入模式下的Tab按键仍然会导致光标跳转到Snippet的片段占位符处,导致光标“随机跳转”的问题。
发生原因
这是因为触发代码片段之后,LuaSnip会一直维持一个记录占位符挑战的Session,这个Session在当前的Buffer会一直保持直到结束。
修复方法
Github上的这篇Issue中,lawrence-laz和pogopaule给出了通过autocmd
对VIM/NeoVIM配置文件的问题修复方法,这里展示后者使用回调函数实现的更为简明的方法:
vim.api.nvim_create_autocmd('ModeChanged', {
pattern = '*',
callback = function()
if ((vim.v.event.old_mode == 's' and vim.v.event.new_mode == 'n') or vim.v.event.old_mode == 'i')
and require('luasnip').session.current_nodes[vim.api.nvim_get_current_buf()]
and not require('luasnip').session.jump_active
then
require('luasnip').unlink_current()
end
end
})
在保存配置之后,重新启动NeoVIM即可生效。