文件 手冊 語法

語法

Mihomo 使用 YAML 作為設定檔格式。這裡整理了寫設定時會用到的幾條語法規則,包括註解、物件/陣列、錨點引用、網域萬用字元和埠範圍寫法。

基本規則

YAML 大小寫敏感,用縮排表示層級關係。縮排只能用空格,不能用 Tab;具體縮排幾個空格不重要,只要同一層級的元素左對齊即可。

如果編輯器裡出現「縮排對不齊但看起來是對的」的報錯,十有八九是不小心混入了 Tab 字元,檢查一下縮排方式。

註解

# 開頭到行尾都是註解。# 前面必須是行首或者有空格,否則不會被當作註解(比如寫在 URL 裡的 # 就不受影響)。

config.yaml YAML
port: 7890 # http 代理埠
socks-port: 7891
# socks 代理埠

物件與陣列

物件用key: value表示,冒號後面要加一個空格。因為 YAML 是 JSON 的超集,所以也可以直接寫 JSON 風格的語法,四種寫法完全等價:

多行寫法(最常見)
YAML 多行
tun:
  enable: true
  stack: system
  auto-route: true
  auto-detect-interface: true
單行 JSON 寫法
YAML 單行
tun: { enable: true, stack: system, auto-route: true, auto-detect-interface: true }

陣列用 - 開頭的行表示,一樣支援單行 JSON 寫法 a: [b, c, d],跟多行陣列等價:

YAML 陣列
a:
  - b
  - c
  - d

錨點與引用

& 用來給一段設定打上錨點,* 用來引用這個錨點,<< 表示把錨點內容合併到目前物件裡。寫多個代理集合、多個規則集合時,公共欄位可以只寫一次,用錨點複用,省掉大量重複程式碼。

config.yaml YAML
p: &p
  type: http
  interval: 3600
  health-check:
    enable: true
    url: https://www.gstatic.com/generate_204
    interval: 300

proxy-providers:
  provider1:
    <<: *p
    url: ""
    path: ./proxy_providers/provider1.yaml

  provider2:
    <<: *p
    type: file
    path: ./proxy_providers/provider2.yaml

上面這段等價於把 p 錨點的內容分別複製進 provider1provider2 裡。注意如果合併時出現重複欄位(比如 provider2 裡重新寫了 type),以自己寫的為準,不會被錨點覆蓋。另外 p 這個鍵名本身在 mihomo 裡並不是一個合法欄位,只是用來存放錨點,解析時會被忽略。

網域萬用字元

這裡說的萬用字元,專門用在 fake-ip-filternameserver-policy 等欄位裡,和路由規則裡的 DOMAIN-WILDCARD 不是一回事,兩者語法不通用。

萬用字元匹配範圍範例
*只匹配一級網域*.baidu.com 匹配 tieba.baidu.com,不匹配 123.tieba.baidu.combaidu.com
+匹配任意多級(前綴寫法,類似 DOMAIN-SUFFIX)+.baidu.com 同時匹配 baidu.comtieba.baidu.com123.tieba.baidu.com
.匹配任意多級,但不含裸網域本身.baidu.com 匹配 tieba.baidu.com,不匹配 baidu.com

使用萬用字元時建議用引號包裹,避免被 YAML 解析成其他類型:

config.yaml YAML
fake-ip-filter:
  - ".lan"
  - "xbox.*.microsoft.com"
  - "+.xboxlive.com"
  - localhost.ptlogin2.qq.com

引入網域集合

部分欄位(如 fake-ip-filter)支援直接引入 rule-setgeosite 集合,寫法為 類型:集合名

這裡的 rule-set 僅支援 behavior 為 domain / classical 的規則集合。

config.yaml YAML
fake-ip-filter:
  - "rule-set:xxx"
  - "geosite:xxx"

埠範圍

- 表示一個埠範圍,用 /, 分隔多個埠 / 埠範圍,可以混合書寫:

範例 Port Range
# 匹配 114-514、810-1919 兩個區間,以及單獨的 65530 埠
114-514/810-1919,65530