VIM/NeoVIM:解决LuaSnip下Tab按键跳转冲突问题

发布时间 2024-01-13 17:13:38作者: KLangHu

主要现象

当使用LuaSnip生成片段时,即使切换过VIM模式,输入模式下的Tab按键仍然会导致光标跳转到Snippet的片段占位符处,导致光标“随机跳转”的问题。

发生原因

这是因为触发代码片段之后,LauSnip会一直维持一个记录占位符跳转的Session,这个Session在当前Buffer会一直持续到占位符结束。

修复方法

Github上的这篇Issue中,lawrence-lazpogopaule给出了通过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即可生效。