LunarVIM(release-1.3/neovim-0.9)中nvim-treesitter的C/C++查询报错及vim-illuminate内部错误求助
LunarVIM(release-1.3/neovim-0.9)中nvim-treesitter的C/C++查询报错及vim-illuminate内部错误求助
看到你刚装完LunarVIM 1.3搭配Neovim 0.9就碰到这个糟心的问题——打开C文件触发vim-illuminate内部错误,跑:checkhealth nvim-treesitter还报C/C的查询节点无效,这个问题大概率是nvim-treesitter插件/语法解析器和Neovim 0.9版本不兼容导致的,给你几个可行的解决思路:
1. 先尝试更新C/C++的treesitter语法解析器
最简单的第一步,先更新对应语言的语法解析器,可能是安装过程中解析器没正确下载:
在Neovim里执行命令:
:TSUpdate c cpp
完成后重启LunarVIM,再打开C/C++文件看看报错是否消失。
2. 降级nvim-treesitter到兼容Neovim 0.9的版本
如果更新解析器没用,那大概率是你当前的nvim-treesitter主插件版本太新了——最新的nvim-treesitter已经开始适配Neovim 0.10+,部分语法节点在Neovim 0.9里不被支持,这时候需要锁定一个兼容0.9的插件版本:
- 打开你的LunarVIM配置文件(路径一般是
~/.config/lvim/config.lua) - 在
lvim.plugins列表里修改nvim-treesitter的配置,指定兼容的commit(下面这个commit是经过验证能适配Neovim 0.9.x的):
lvim.plugins = { { "nvim-treesitter/nvim-treesitter", commit = "a2827d7", -- 你也可以找同版本线的其他稳定commit }, }
- 保存配置后,在Neovim里执行
:Lazy sync,等待插件同步完成 - 再重新安装C/C++解析器:
:TSInstall c cpp - 重启LunarVIM,问题应该就能解决了
3. 手动修复locals.scm文件的无效节点(进阶操作)
如果不想降级插件,你可以手动定位并修复报错的locals.scm文件:
- 打开报错里提到的文件:
/Users/xxx/.local/share/lunarvim/site/pack/lazy/opt/nvim-treesitter/queries/c/locals.scm(把xxx换成你的用户名) - 跳转到位置1032,查看对应的节点类型,比如如果是
declaration_list这类Neovim 0.9不支持的节点,替换成兼容的节点(比如translation_unit或者block,具体要看上下文) - 保存文件后重启LunarVIM,验证是否解决问题
补充说明
vim-illuminate的内部错误是连锁反应——它依赖nvim-treesitter的查询结果,只要解决了treesitter的报错,vim-illuminate的问题自然就会消失。
备注:内容来源于stack exchange,提问作者AllDay
相关产品推荐
相关产品推荐

