在Neovim中引入luasnip出现报错问题求助
问题描述
- 环境:AstroNvim + LuaSnip
- 操作:
- 在
init.lua末尾添加require("luasnip.loaders.from_snipmate").lazy_load() - 在
init.lua同目录创建snippets目录,放入基础Snipmate格式的代码片段
- 在
- 异常现象:
:LuaSnipListAvailable等命令能正常运行,friendly-snippets里的片段也能用,但启动Neovim时弹出错误:
Error detected while processing /Users/myusername/.config/nvim/init.lua: E5113: Error while calling lua chunk: ...m/site/pack/packer/start/packer.nvim/lua/packer/load.lua:171: Vim(echomsg):E121: Undefined variable: Error stack traceback: [C]: in function 'cmd' ...m/site/pack/packer/start/packer.nvim/lua/packer/load.lua:171: in function <...m/site/pack/packer/start/packer.nvim/lua/packer/load.lua:167> /Users/myusername/.local/share/nvim/packer_compiled.lua:496: in function </Users/myusername/.local/share/nvim/packer_compiled.lua:485> [C]: in function 'require' /Users/myusername/.config/nvim/init.lua:23: in main chunk
- 补充:只要是直接写
require("luasnip")相关代码,都会触发这个错误
解决方案
删掉init.lua里的直接require语句
把init.lua末尾加的require("luasnip.loaders.from_snipmate").lazy_load()删掉。AstroNvim有自己的插件加载流程,直接在根init.lua里加载LuaSnip模块会打乱packer的加载顺序,导致报错。用AstroNvim的user配置来加载自定义片段
在~/.config/nvim/lua/user目录下新建luasnip.lua文件,写入以下内容:
return { "L3MON4D3/LuaSnip", config = function(plugin, opts) -- 先执行AstroNvim自带的LuaSnip配置 require "plugins.configs.luasnip"(plugin, opts) -- 加载自定义的Snipmate片段 require("luasnip.loaders.from_snipmate").lazy_load({ paths = { vim.fn.stdpath "config" .. "/snippets" } }) end, }
这个文件会通过AstroNvim的插件覆盖机制,在正确的时机初始化LuaSnip并加载你的自定义片段,不会干扰packer的加载流程。
重新生成packer编译文件
打开Neovim后运行:PackerCompile,然后重启Neovim,启动错误应该就消失了。检查自定义片段的语法
如果还是报错,去snippets目录里检查你的Snipmate片段文件,看看有没有语法错误,比如写错了变量、格式不符合Snipmate规范,这类问题也会导致LuaSnip初始化时出问题。
内容的提问来源于stack exchange,提问作者Marvin Kim
相关产品推荐
相关产品推荐

