【AI生成】【沉浸式解决问题】Claude Code 的 claude-hud(状态栏)一切换供应商就消失?一文彻底解决
文章目录
AI生成说明:本文由 Claude Code + DeepSeek 通过 zhihu CLI 总结出个人风格 skill,再由 Claude Code + DeepSeek 根据对话总结成文。我会根据需要补充部分截图和调整错误。
技术:Claude Code / 插件 / Hook / cc-switch
平台:Windows
前言 — 先说我是怎么踩坑的
最近在折腾 Claude Code,给它装了个状态栏插件 claude-hud(就是在输入框下方实时显示上下文占用、模型、工具、agent、todo 的那一行,懂的都懂,写代码时抬眼瞄一眼上下文还剩多少,真的香)。还配了些 Hook、MCP 之类的自定义设置。
结果呢?反反复复装了好几次都是"User 级",装完确实能用,但只要一用 cc-switch 切换供应商/模型,这一堆设置就全没了;再切回之前"装过"的供应商,它又回来了。就这么时有时无地折磨了我大半天。
一开始我还以为是自己安装姿势不对,卸载重装了好几遍,结果一样。最后我扒开 ~/.claude/settings.json、翻了 claude-hud 和 cc-switch 两个项目的 README 和 issues,才终于把根因和正确解法揪出来。
更关键的是,我发现这不只是 claude-hud 的个案——它是所有"写在 settings.json 里的插件/Hook 配置"的共同命运。所以这篇虽然从 HUD 说起,但解法适用于所有插件和 Hook。
这篇就把完整排查思路 + 一步到位的通用解法喂给你,别像我一样白白折腾。
一、先说人话:Claude Code 的配置是怎么存、怎么没的
Claude Code 的很多自定义能力,本质都是往 ~/.claude/settings.json(或项目级 settings.json)里写配置。常见的几类:
| 配置 | 放哪 | 举例 |
|---|---|---|
状态栏 statusLine |
settings.json 顶层 | claude-hud、cc-statusline 等状态栏插件 |
Hook(钩子)hooks |
settings.json 顶层 | 脚本、命令、自动化回调 |
启用插件 enabledPlugins |
settings.json | 装了哪些 claude 插件 |
| MCP、权限等其它自定义 | settings.json / local | MCP servers、permissions、theme… |
关键在settings.json的顶层字段。一旦有工具整包重写这个文件,凡是没被"带走"的顶层字段就会消失。
二、症状复现:到底发生了什么
以 claude-hud 的状态栏为例:
| 时机 | 状态栏 / 自定义设置 |
|---|---|
| 刚 setup 装完 | ✅ 所有会话窗口都显示 |
| 用 cc-switch 切换到另一个供应商 | ❌ 消失 |
| 再切回"装过 claude-hud 的那个供应商" | ✅ 又回来了 |
这套"时有时无"的组合拳,基本就把问题指向一个地方:settings.json 被某个东西整体重写了。
去 ~/.claude/settings.json 里一看,果然——里面根本没有 statusLine / hooks 字段了。而我明明 setup 过。真相大白:是 cc-switch 切换供应商时,把 settings.json 整个覆盖了,把那些顶层字段冲掉了。
三、根因深挖:为什么切换供应商就把设置冲没了
cc-switch 的机制是这样的(我翻了它数据库和 GitHub issues 确认过):
- 它对每个已存在的供应商保存一份
settings_config(创建它时的配置快照,通常只有env+enabledPlugins这些)。 - 切换供应商时,它用「当前供应商的 settings_config + 一份通用配置片段」重新生成并整体替换
~/.claude/settings.json。 - 所以:任何只存在于 settings.json、又不在通用配置片段里的顶层字段——
statusLine、hooks、以及你其它手写配置——都会在切换时被清掉。
用大白话说:cc-switch 嘴上说"我只动供应商套接字配置",结果手一抖把整个 settings.json 都换了,你的插件/Hook 配置就成了牺牲品。 而且它还贴心地在切换前备份了一下旧文件(settings.json.bak.*),但备份归备份,新文件里照样没有那些配置。
顺带:我在 cc-switch 的 README FAQ 里找到了它亲口承认这个问题,原话大意是"切换供应商后插件配置消失了?→ 用共享配置片段(Shared Config Snippet)"。它自己也认了。只不过解决得不够自动,需要我们手动把那一步做对(见下节)。
四、✅ 通用解法:把配置塞进 cc-switch 的「通用配置片段」
既然问题是"settings.json 会被 cc-switch 整体覆盖",那思路就一个:让 cc-switch 在重写 settings.json 时,永远把你需要的顶层字段带上。它官方给的口子就是「通用配置片段(Shared Config Snippet)」。
这套方法不只救 claude-hud 的 statusLine,所有写在 settings.json 的插件和 Hook 配置都能一并保住——只要把它们都放进通用片段。
按下面这几步做,一个 bug 都不用改,纯界面操作:
Step-1 打开「通用配置片段」
在 cc-switch 里打开「编辑供应商」→ 找到「通用配置片段(Shared Config Panel)」相关入口。
Step-2 把想保住的配置加进去(推荐:一键提取)
-
最简单:点界面上的「从编辑内容提取」按钮,cc-switch 会自动把当前供应商里可共享的非敏感顶层配置(
statusLine、enabledPlugins、extraKnownMarketplaces、theme等)提取进通用片段,省得手敲。
-
或手动加:在通用配置 JSON 里补上你想保住的字段——比如状态栏 + Hook 一起:
{
"statusLine": {
"type": "command",
"command": "<你的 claude-hud setup 生成的命令>",
"refreshInterval": 5
},
"hooks": {
"PostToolUse": [
{ "matcher": "*", "hooks": [{ "type": "command", "command": "<你的 hook 命令>" }] }
]
},
"enabledPlugins": {
"claude-hud@claude-hud": true
}
}
通用片段里想加哪些字段就加哪些——
statusLine、hooks、enabledPlugins、theme、其它顶层配置都行。原则:凡是你不希望切供应商时丢的,都放进来。
Step-3 ⭐ 关键一步:在当前供应商的「编辑」界面手动保存一次
这是最容易漏、也最关键的一步!
- 通用配置片段默认只对"新建供应商并勾选『应用通用配置』"生效,对已经存在、正在用的这个供应商不会自动回写。
- 所以要手动去当前供应商的编辑界面里点一次「保存」,cc-switch 才会把(含所有顶层配置的)通用片段写回/应用到当前供应商的 settings.json。

Step-4 生效
发一条消息,或重启 Claude Code,配置(状态栏/Hook/插件)就都回来了。
验证:切到另一个供应商,再切回来——配置这次稳稳地还在,不再消失。
五、测试验证:我怎么确认它好了
- 操作完 Step-3 保存后,打开
~/.claude/settings.json,搜statusLine/hooks——这次应该能搜到了(之前一直是搜不到的)。 - 发条消息,状态栏 / Hook 生效。
- 在 cc-switch 里切供应商,配置保持在。
- 再开一个全新会话,配置也在(说明是全局/user 级生效,不是单个会话碰巧)。
六、注意事项 / 常见坑(都是我趟过的)
| 坑 | 说明 |
|---|---|
| 只 install 不 setup | 某些插件(如 claude-hud)不会自动注册配置,必须跑它的 setup 命令生成配置。 |
| 把配置写进 settings.local.json | 不保证被读取。官方设配置一律写 settings.json。 |
| 通用片段提了但没在当前供应商手动保存 | 通用片段默认只对新建供应商生效;已存在的当前供应商要手动保存一次才会回写。这一步漏了 = 白白提取。 |
| 改了配置文件不生效 | Claude Code 只在交互后重载;旧版本还得完全重启才生效。 |
| 以为网络/代理问题 | 这类配置消失与网络代理无关,别往那方面查。 |
| 环境变量误设 | 某些插件有禁用开关(如 claude-hud 的 CLAUDE_HUD_DISABLE)会静默失效,确认没被 shell 导出。 |
七、总结
一句话记牢:
凡是写在
settings.json顶层的插件/Hook 配置(statusLine、hooks、enabledPlugins等),只要你会整包重写 settings.json 的工具(典型就是 cc-switch 切换供应商/模型),它们就会在切换时被冲掉。解法 = 把要保住的顶层字段塞进 cc-switch 的通用配置片段,并在当前供应商编辑界面手动保存一次。
核心就两个动作:「提取/写入通用片段」+「当前供应商编辑里手动保存」。做完这两个,你所有的插件配置、Hook、状态栏从此稳如老狗,随便切供应商、切模型都不丢。
这套方法对一切"切换模型导致设置丢失"的场景通用——不管丢的是状态栏、Hook、权限还是其它顶层配置,都是一个套路:让它在通用配置片段里"常驻"。
后记
这篇能成文,纯属被折腾出来的。顺便安利一个配套玩法:cc-switch 的路由还支持自动故障转移(failover)——当前模型 API 限流/欠费(429/401)时,会自动切到故障转移队列里的备用供应商,不用手动换。Claude 会话照样接着跑,配合这篇一起看,多模型兜底 + 配置常驻不丢,体验直接起飞。后续我也会把这块单独开一篇。
参考文献
- claude-hud GitHub:https://github.com/jarrodwatts/claude-hud
- cc-switch GitHub:https://github.com/farion1231/cc-switch
- claude-hud statusLine 与 setup:见 README 的 Install Step 3 / 故障排查
- cc-switch README FAQ:“My plugin configuration disappeared after switching providers” → 通用配置片段(Shared Config Snippet)
- Claude Code 官方配置文档(settings.json 的 statusLine / hooks / permissions 等字段):https://code.claude.com/docs/en/settings
更多推荐




所有评论(0)