为什么不要直接编辑订阅文件
订阅每次更新都会整份覆盖,手改的内容会全部消失。Clash Verge 的做法是把你的改动放在单独一层,生成最终配置时再合并进去,订阅怎么更新都不影响。
在「订阅」页新建时可以选 Merge(YAML 片段)和 Script(JavaScript)两种扩展。建好之后在配置卡片的菜单里绑定;也可以用全局的 Global Merge 和 Global Script,对所有订阅生效。
先备份
改扩展之前先记下当前能正常工作的配置名,出问题解绑扩展就能立刻回到原状。
Merge 和 Script 各自适合什么
- 1
Merge:写 YAML 片段
顶层字段直接覆盖,比如 mixed-port、mode、log-level。规则用三个专门的键:prepend-rules 插到最前面,append-rules 追加到末尾,filter-rules 删掉匹配的行。要让自定义规则优先生效,用 prepend-rules。
- 2
Script:写一个 main 函数
函数签名是 main(config),拿到完整配置对象,改完把整个对象 return 回去。适合按条件批量处理,比如给所有 url-test 组统一补上 interval 和 tolerance,或者按关键字过滤节点。
- 3
执行顺序
先订阅原文,再 Merge,最后 Script。挂多个扩展时按你排列的顺序依次执行,同一个字段被改多次时以最后一次为准。
检查合并结果
保存后从配置卡片菜单里打开的是原始订阅文件,看不到合并结果。要看真正生效的配置,用「查看运行配置」,Merge 和 Script 的改动都应该在里面。如果没有,多半是 YAML 缩进错了,日志页第一屏会有一行解析失败的提示,指出具体行号。
- prepend-rules 里不要写 MATCH,它会挡住后面所有规则
- Script 必须 return 整个 config 对象,返回片段会导致配置为空
- 保存后客户端会自动重新生成并热重载,不需要重启程序
常见问题
Merge 里写了 dns 段,为什么没生效?
检查客户端的 DNS 覆写开关。开着的时候,Clash Verge 会用自己的 DNS 设置覆盖配置文件里的 dns 段,关掉它才会用你写的那份。
能同时挂多个 Merge 吗?
可以。扩展是一条链,按排列顺序依次执行。建议一个 Merge 只做一件事,比如一个专门管规则、一个专门管端口和 DNS,出问题时好定位。