NeoVim中nvim-cmp在CSS/SCSS输入$时崩溃的排查求助
问题描述
安装用于生成函数/CSS匹配闭合标签的nvim-autopairs插件后,nvim-cmp出现崩溃问题。已通过Lazy包管理器卸载该插件并从init.lua移除相关配置,但问题仍未解决。仅在CSS/SCSS文件中输入$时触发错误,报错信息如下:
Error executing vim.schedule lua callback:
...local/share/nvim/lazy/nvim-cmp/lua/cmp/utils/snippet.lua:409: snippet parsing failed.
stack traceback:
[C]: in function 'error'
...local/share/nvim/lazy/nvim-cmp/lua/cmp/utils/snippet.lua:409: in function 'parse'
...cgowan/.local/share/nvim/lazy/nvim-cmp/lua/cmp/entry.lua:185: in function '_get_word'
...cgowan/.local/share/nvim/lazy/nvim-cmp/lua/cmp/entry.lua:90: in function '_set_completion_item'
...cgowan/.local/share/nvim/lazy/nvim-cmp/lua/cmp/entry.lua:62: in function 'new'
...gowan/.local/share/nvim/lazy/nvim-cmp/lua/cmp/source.lua:367: in function ''
vim/_editor.lua: in function <vim/_editor.lua:0>
使用auto-sessions管理会话,但新打开项目时问题依然触发。
排查与解决步骤
1. 用纯净环境缩小问题范围
- 启动NeoVim时加参数:
nvim -u NONE,进入无插件的纯净模式 - 手动配置最简版
nvim-cmp(仅核心+CSS补全源),测试输入$是否还报错:- 不报错:说明是其他插件和
nvim-cmp冲突 - 仍报错:考虑
nvim-cmp版本或NeoVim自身版本问题
- 不报错:说明是其他插件和
2. 检查并更新/回退nvim-cmp及相关源
- 用Lazy查看
nvim-cmp和CSS补全源(如cmp-css、cmp-nvim-lsp)的版本,更新到最新版::Lazy update nvim-cmp cmp-css cmp-nvim-lsp - 若更新后问题仍存在,回退
nvim-cmp到稳定版本,在Lazy配置中指定版本:{ 'hrsh7th/nvim-cmp', version = 'v0.0.1', -- 替换为已知稳定的版本号 -- 其他配置 }
3. 排查CSS补全源问题
- 临时注释掉
nvim-cmp配置中的CSS相关补全源,测试输入$是否报错:- 恢复正常:说明该补全源返回的补全项有格式错误,需检查源的配置或反馈问题
- 仍报错:排除补全源问题,继续下一步
4. 清理残留配置与缓存
- 彻底检查所有配置文件(如
init.lua、局部配置片段),删除nvim-autopairs的残留代码(比如事件绑定、钩子函数) - 清除NeoVim缓存文件:
rm -rf ~/.local/share/nvim/cache rm -rf ~/.local/state/nvim - 用
auto-sessions清除所有会话:
重启NeoVim后新建会话测试:SessionDelete
5. 检查NeoVim版本兼容性
nvim-cmp通常要求NeoVim 0.7+,建议升级到最新稳定版:# Debian/Ubuntu系统示例 sudo apt update && sudo apt install neovim # macOS系统示例 brew upgrade neovim
6. 开启调试定位具体问题
- 在
nvim-cmp配置中开启调试模式:require('cmp').setup({ -- 其他配置 logging = { level = 'debug', }, }) - 触发错误后查看日志文件(路径一般为
~/.local/state/nvim/cmp.log),找到导致snippet解析失败的具体补全项,针对性处理
内容的提问来源于stack exchange,提问作者Frizzant

