YAML 是面向配置的数据序列化语言,用缩进表达层级。Obsidian frontmatter、Hugo 配置、GitHub Actions workflow 全是 YAML——比 ini文件 表达力强,比 JSON 可读且支持注释。
三种基础结构
映射(键值对):
name: Obsidian
version: 1.0序列(列表):
tags:
- Markdown
- 标记语言标量:字符串、数字、布尔、null(~ 或留空)。
三种结构自由嵌套:映射的值可以是序列或子映射,列表项也可以是映射——这是它碾压 ini 的地方。
缩进规则
- 空格缩进,禁止 Tab;同级元素严格对齐
- 缩进深度表达层级,冒号后的空格不可省
- 惯例 2 空格一级
常用语法
# 注释——JSON 做不到
literal: |
保留换行的整段文本
folded: >
换行折叠成空格
quoted: "强制字符串"
single: '单引号串,反斜杠不转义'多文档与锚点
一个文件装多个文档,用 --- 分隔——Obsidian frontmatter 的边界正是这个语法:frontmatter 就是嵌在 Markdown 头部的独立 YAML 文档(见 Markdown与HTML的关系)。
锚点与引用,复用重复片段:
base: &defaults
adapter: postgres
host: localhost
development:
<<: *defaults # 合并锚点
database: dev类型推断陷阱
YAML 自动推断类型,纯文本值必须加引号:
| 写法 | 被解析为 | 安全写法 |
|---|---|---|
no / Yes / on | 布尔值 | "no"(挪威问题 Norway Problem) |
1.10 | 数字 1.1,尾部 0 丢失 | "1.10"(版本号必加) |
0755 | 八进制(YAML 1.1) | "0755" |
版本号、国家代码、性别这类字段不加引号,就是事故现场。