YAML是什么意思?

一句话结论

YAML 是以缩进表示层级的纯文本配置格式,Clash、Mihomo 等客户端的配置文件都使用它。

它对空格和缩进格外敏感:少一格、多一格,或者混入制表符,整份配置都可能读取失败。改配置前先弄清它的几条基本写法,能省下大量排查时间。

打开 Clash 一类客户端的配置文件,你看到的是缩进整齐的几十到几百行文字,这就是 YAML。它不是编程语言,只是一种让人和程序都读得懂的数据书写格式。

它是什么

YAML 用三种基本元素描述数据:

  • 键值对:写成 “键: 值”,冒号后面必须有空格。
  • 列表:每一项以 “- ” 开头,横杠后同样有空格。
  • 层级:靠行首空格的数量表示,同一层的缩进必须一致。

以 Clash 系配置为例,结构大致是若干顶层键,其中放节点的是 proxies,放策略组的是 proxy-groups,放规则的是 rules。各字段的含义,请看Clash 配置文件怎么看。

#示意:不是可用配置
port: 7890
proxies:
  - name: 示例节点
    type: trojan
    server: example.com

以井号开头的内容是注释,不会被读取。

为什么它容易出错

常见错误 现象
缩进用了制表符 解析直接失败,通常提示 tab 或 mapping
冒号后漏了空格 整行被当成字符串,字段不生效
同层缩进不一致 某一项被错误地挂到上一层
值里含冒号、井号等特殊字符没加引号 被截断或当成注释
复制粘贴带入全角符号 肉眼难发现,却读不出来

节点名称里有冒号、方括号或逗号时,建议加上引号。

常见误解

“YAML 和 JSON 完全是两回事。” 它们能表达的结构很接近,很多 YAML 解析器也能读一部分 JSON 写法,但手写习惯完全不同。sing-box 的配置主要是 JSON,别把两种格式混着贴。

“改完保存就行,不用校验。” 保存不等于有效。多数客户端提供配置校验或日志,出错时先看日志指出的行号。

“中文名称会导致错误。” 通常不会,真正的问题多半在符号或缩进上。

怎么检查自己改过的配置

  1. 用带显示空白字符功能的编辑器打开,确认没有制表符。
  2. 逐层折叠,看层级是否符合预期。
  3. 用站内的Clash 配置生成工具对照一份结构正确的样例。
  4. 启动失败时,先读客户端日志里的第一条报错,再改,别一次改很多处。

下一步

想学规则怎么写,读Clash 规则怎么写;想了解策略组字段,读策略组一条。

哪些文章讲到了YAML

想对照具体机场的记录?

机场榜单和机场目录里,价格、线路、协议、节点地区都是逐家列着的;不确定该装哪个客户端,试试客户端筛选器。