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、又不在通用配置片段里的顶层字段——statusLinehooks、以及你其它手写配置——都会在切换时被清掉

用大白话说: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 会自动把当前供应商里可共享的非敏感顶层配置(statusLineenabledPluginsextraKnownMarketplacestheme 等)提取进通用片段,省得手敲。
    在这里插入图片描述

  • 或手动加:在通用配置 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
  }
}

通用片段里想加哪些字段就加哪些——statusLinehooksenabledPluginstheme、其它顶层配置都行。原则:凡是你不希望切供应商时丢的,都放进来

Step-3 ⭐ 关键一步:在当前供应商的「编辑」界面手动保存一次

这是最容易漏、也最关键的一步!

  • 通用配置片段默认只对"新建供应商并勾选『应用通用配置』"生效,对已经存在、正在用的这个供应商不会自动回写
  • 所以要手动去当前供应商的编辑界面里点一次「保存」,cc-switch 才会把(含所有顶层配置的)通用片段写回/应用到当前供应商的 settings.json。

在这里插入图片描述

Step-4 生效

发一条消息,或重启 Claude Code,配置(状态栏/Hook/插件)就都回来了。
在这里插入图片描述

验证:切到另一个供应商,再切回来——配置这次稳稳地还在,不再消失。


五、测试验证:我怎么确认它好了

  1. 操作完 Step-3 保存后,打开 ~/.claude/settings.json,搜 statusLine / hooks——这次应该能搜到了(之前一直是搜不到的)。
  2. 发条消息,状态栏 / Hook 生效。
  3. 在 cc-switch 里切供应商,配置保持在。
  4. 再开一个全新会话,配置也在(说明是全局/user 级生效,不是单个会话碰巧)。

六、注意事项 / 常见坑(都是我趟过的)

说明
只 install 不 setup 某些插件(如 claude-hud)不会自动注册配置,必须跑它的 setup 命令生成配置。
把配置写进 settings.local.json 不保证被读取。官方设配置一律写 settings.json
通用片段提了但没在当前供应商手动保存 通用片段默认只对新建供应商生效;已存在的当前供应商要手动保存一次才会回写。这一步漏了 = 白白提取。
改了配置文件不生效 Claude Code 只在交互后重载;旧版本还得完全重启才生效。
以为网络/代理问题 这类配置消失与网络代理无关,别往那方面查。
环境变量误设 某些插件有禁用开关(如 claude-hud 的 CLAUDE_HUD_DISABLE)会静默失效,确认没被 shell 导出。

七、总结

一句话记牢:

凡是写在 settings.json 顶层的插件/Hook 配置(statusLinehooksenabledPlugins 等),只要你会整包重写 settings.json 的工具(典型就是 cc-switch 切换供应商/模型),它们就会在切换时被冲掉。解法 = 把要保住的顶层字段塞进 cc-switch 的通用配置片段,并在当前供应商编辑界面手动保存一次。

核心就两个动作:「提取/写入通用片段」+「当前供应商编辑里手动保存」。做完这两个,你所有的插件配置、Hook、状态栏从此稳如老狗,随便切供应商、切模型都不丢。

这套方法对一切"切换模型导致设置丢失"的场景通用——不管丢的是状态栏、Hook、权限还是其它顶层配置,都是一个套路:让它在通用配置片段里"常驻"


后记

这篇能成文,纯属被折腾出来的。顺便安利一个配套玩法:cc-switch 的路由还支持自动故障转移(failover)——当前模型 API 限流/欠费(429/401)时,会自动切到故障转移队列里的备用供应商,不用手动换。Claude 会话照样接着跑,配合这篇一起看,多模型兜底 + 配置常驻不丢,体验直接起飞。后续我也会把这块单独开一篇。


参考文献

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐