文档 手册 语法

语法

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