Skip to main content
YAML 覆写先按字段类型选择处理器,再执行键名修饰符。字段类型决定普通键、merge 和列表修饰符的行为。

字段类型

key-force 不经过上表的字段处理,直接替换整个字段。

标量字段

标量字段只接受普通键或 key-force。普通键会覆盖值,key-startkey-endkey-merge 不会把标量转换成列表或对象。
修改端口.yaml
标量字段 diff.yaml
下面的写法不会报 YAML 错误,但不会修改 mixed-port
无效的标量修饰符.yaml

普通列表

普通列表不去重。key 替换原列表,key-start 插入开头,key-end 追加末尾,key-merge 在原列表后追加。
修改认证列表.yaml
普通列表 diff.yaml
如果误用 authentication-force,它仍然是合法语法,但会删除原列表,只保留覆写中的项目:
直接替换认证列表.yaml

命名对象列表

proxiesproxy-groups 是命名对象列表。项目有非空 name 时,同名项目只保留最后出现的项目,并保留最后项目的位置;没有有效 name 的项目始终保留。
覆盖策略组.yaml
假设原配置已经有 name: PROXY,结果是原策略组被新项目替换,而不是出现两个 PROXY
命名对象列表 diff.yaml
name 为空、缺失或只包含空格时不会去重:
不参与去重的项目.yaml

rules 的特殊行为

rules 使用列表语法。应用覆写时,原配置中从第一个终端 MATCH,... 开始的规则段会移动到最终位置;覆写文件新增的规则不会再次扫描或移动。
规则列表.yaml
规则列表 diff.yaml
即使覆写中写成下面这样,MATCH 仍会被移到最后:
MATCH 不会留在中间.yaml
新增 MATCH 的实际结果 diff.yaml
这里最后的 MATCH,OLD 来自原配置;新增的 MATCH,PROXY 仍按 rules-end 的位置保留。

对象字段

对象字段使用普通键时会递归处理子键。以 dns 为例:
修改 DNS 子字段.yaml
只会修改 dns.enabledns.enhanced-mode,原有的 nameserver 等子字段会保留。
DNS 子字段 diff.yaml
对对象使用 dns-startdns-end 不会生效,因为对象不是列表:
对象上的列表修饰符.yaml

merge

key-merge 的行为取决于字段类型:
  • 对普通列表、命名对象列表和 rules:追加数组项。
  • 对对象映射:递归合并映射。
  • 对普通对象:按字面量键合并,嵌套键不会再次解析修饰符。
  • 对标量:忽略。

映射合并

Provider 合并.yaml
原来的 Provider 映射会先被 proxy-providers 替换,再由 proxy-providers-merge 添加 intervalextra

普通对象合并

DNS 合并.yaml
dns-merge 中的 nameserver 会按字面量字段写入;它不会变成 nameserver-start,也不会把数组自动追加到原列表。

force

key-force 是最高优先级。只要同一字段存在 force 值,其他 startreplacemergeend 操作都不会继续执行。
强制替换 DNS.yaml
强制替换列表 diff.yaml
force 没有字段类型限制;它的错误示范不是语法错误,而是误用后会丢弃整个字段:
误用 force.yaml
结果只保留 dns.enable,原有的 nameserverfallback 等字段都会被删除。

顶层字段表

下表是 YumeBox 当前识别的顶层字段。字段不在表中时,继续使用未知字段的通用规则。 geosite-matcher 通过最终校验时只接受 mphsuccinct;其他值会在覆写执行后被拒绝。

嵌套字段表

dns

其他对象

未知字段

未知字段不会被拒绝:对象递归、标量覆盖、数组使用 key-startkey-end
未知对象字段.yaml
需要保留修饰符字符时使用尖括号:
字面量键.yaml
这会写入真实键名 rules+,不会向 rules 列表追加内容。
Последнее изменение 13 августа 2026 г.