直接編輯訂閱檔案是新手常犯的錯誤:改完確實生效,但訂閱一更新,全部修改灰飛煙滅。Clash Verge 提供了正確的解法——Merge 和 Script,把「你的修改」和「服務商的配置」分開存放,執行時疊加。
機制:疊加而不是修改
核心每次載入配置時的流水線:訂閱原文 → 應用 Merge(宣告式合併)→ 執行 Script(JavaScript 加工)→ 得到最終配置。訂閱更新只替換第一環,你的 Merge 和 Script 原樣保留、自動重新疊加。
入口:「訂閱」頁面右鍵「全域性擴充套件配置」,或右鍵某個訂閱卡片選「編輯 Merge / 編輯 Script」(前者對所有訂閱生效,後者只作用於該訂閱)。
Merge:夠用九成場景
Merge 檔案也是 YAML,用帶字首的欄位宣告合併行為。最常用的三個字首:prepend-(插到最前)、append-(追加到最後)、直接寫欄位名(整體覆蓋)。
# 在規則列表最前面插入自己的規則(優先順序最高)
prepend-rules:
- DOMAIN-SUFFIX,company-vpn.example,DIRECT
- PROCESS-NAME,Telegram.exe,PROXY
# 覆蓋 DNS 配置
dns:
enable: true
enhanced-mode: fake-ip
nameserver:
- https://223.5.5.5/dns-query
# 追加一個自用分組
append-proxy-groups:
- name: "流媒體"
type: select
proxies: [HK-01, SG-02]
規則用 prepend 還是 append 有講究:想搶在訂閱規則之前生效(比如強制某域名直連)用 prepend;做兜底補充用 append。規則語法本身見自定義規則。
Script:處理動態邏輯
Merge 做不到的(按條件改節點名、批次過濾、動態生成分組),交給 Script。它是一個 JavaScript 函式,入參是合併後的配置物件,返回值就是最終配置:
function main(config) {
// 過濾掉名字帶「到期」「剩餘」的資訊節點
config.proxies = config.proxies.filter(
p => !/到期|剩餘|流量/.test(p.name)
);
// 給所有 vmess 節點強制開啟 udp
config.proxies.forEach(p => {
if (p.type === "vmess") p.udp = true;
});
return config;
}
Script 裡拋異常會導致配置載入失敗、核心用不上新配置。改完先在「日誌」頁確認沒有報錯,再驗證分流是否符合預期。
排查:改了沒生效?
- 確認編輯的是當前選中的訂閱(或全域性擴充套件配置);
- 「日誌」頁面看有沒有 YAML 語法錯誤——縮排錯一格整段作廢;
- 右鍵訂閱卡片「重新啟用」強制過載一次;
- 用「連線」頁面實測流量命中的規則,驗證 prepend 順序是否如預期。
配置檔案三大件還不熟的話,先補配置結構詳解這一課。