From f13778aa5a83a49e21fb8ebd9e6155cfb6c25dc9 Mon Sep 17 00:00:00 2001
From: jaywcjlove <398188662@qq.com>
Date: Fri, 7 Oct 2022 01:18:23 +0800
Subject: [PATCH] feat: add `yaml.md` cheatsheet.
---
 README.md               |   1 +
 docs/yaml.md            | 524 ++++++++++++++++++++++++++++++++++++++++
 scripts/assets/yaml.svg |   6 +
 3 files changed, 531 insertions(+)
 create mode 100644 docs/yaml.md
 create mode 100644 scripts/assets/yaml.svg
diff --git a/README.md b/README.md
index f238270..3cea10e 100644
--- a/README.md
+++ b/README.md
@@ -38,6 +38,7 @@ Quick Reference
 [VSCode](./docs/vscode.md)
 [Vim](./docs/vim.md)
 [XPath](./docs/xpath.md)
+[YAML](./docs/yaml.md)
 
 
 ## Linux 命令
diff --git a/docs/yaml.md b/docs/yaml.md
new file mode 100644
index 0000000..dfa5ba5
--- /dev/null
+++ b/docs/yaml.md
@@ -0,0 +1,524 @@
+YAML 备忘清单
+====
+
+这是理解和编写 YAML 格式配置文件的快速参考备忘单。
+
+入门
+-----------
+
+### 介绍
+
+[YAML](https://yaml.org/) 是一种数据序列化语言,旨在供人类直接读写
+
+- YAML 不允许使用制表符
+- 元素部分之间必须有空间
+- YAML 区分大小写
+- 以 `.yaml` 或 `.yml` 扩展名结束您的 YAML 文件
+- YAML 是 JSON 的超集
+- Ansible playbook 是 YAML 文件
+
+
+
+### 标量类型
+
+
+```yaml
+n1: 1            # 整数
+n2: 1.234        # 浮点
+s1: 'abc'        # 字符串
+s2: "abc"        # 字符串
+s3: abc          # 字符串
+b: false         # 布尔类型
+d: 2015-04-05    # 日期类型
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "n1": 1,
+  "n2": 1.234,
+  "s1": "abc",
+  "s2": "abc",
+  "s3": "abc",
+  "b": false,
+  "d": "2015-04-05"
+}
+```
+
+使用空格缩进。 元素部分之间必须有空间。
+
+### 变量
+
+```yaml
+some_thing: &VAR_NAME foobar
+other_thing: *VAR_NAME
+```
+
+#### ↓ 等效的 JSON
+
+```json {.wrap}
+{
+  "some_thing": "foobar",
+  "other_thing": "foobar"
+}
+```
+
+### 注释
+
+```yaml
+# A single line comment example
+# block level comment example
+# comment line 1
+# comment line 2
+# comment line 3
+```
+
+### 多行字符串
+
+```yaml
+description: |
+  hello
+  world
+```
+
+#### ↓ 等效的 JSON
+
+```json {.wrap}
+{"description": "hello\nworld\n"}
+```
+
+### 继承
+
+
+```yaml
+parent: &defaults
+  a: 2
+  b: 3
+child:
+  <<: *defaults
+  b: 4
+```
+
+#### ↓ 等效的 JSON
+
+```json {.wrap}
+{
+  "parent": {
+    "a": 2,
+    "b": 3
+  },
+  "child": {
+    "a": 2,
+    "b": 4
+  }
+}
+```
+
+### 参考
+
+
+```yaml
+values: &ref
+  - Will be
+  - reused below
+  
+other_values:
+  i_am_ref: *ref
+```
+
+#### ↓ 等效的 JSON
+
+```json {.wrap}
+{
+  "values": [
+    "Will be",
+    "reused below"
+  ],
+  "other_values": {
+    "i_am_ref": [
+      "Will be",
+      "reused below"
+    ]
+  }
+}
+```
+
+### 折叠的字符串
+
+```yaml
+description: >
+  hello
+  world
+```
+
+#### ↓ 等效的 JSON
+
+```json {.wrap}
+{"description": "hello world\n"}
+```
+
+### 两份文件
+
+```yaml
+---
+document: this is doc 1
+---
+document: this is doc 2
+```
+
+YAML使用`---`将指令与文档内容分开。
+
+YAML Collections
+-----------
+
+### 序列
+
+```yaml
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+```
+
+#### ↓ 等效的 JSON
+
+```json
+[
+  "Mark McGwire",
+  "Sammy Sosa",
+  "Ken Griffey"
+]
+```
+
+### 映射
+
+```yaml
+hr:  65       # Home runs
+avg: 0.278    # Batting average
+rbi: 147      # Runs Batted In
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "hr": 65,
+  "avg": 0.278,
+  "rbi": 147
+}
+```
+
+### 映射到序列
+
+```yaml
+attributes:
+  - a1
+  - a2
+methods: [getter, setter]
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "attributes": ["a1", "a2"],
+  "methods": ["getter", "setter"]
+}
+```
+
+### 映射序列
+
+```yaml
+children:
+  - name: Jimmy Smith
+    age: 15
+  - name: Jimmy Smith
+    age: 15
+  -
+    name: Sammy Sosa
+    age: 12
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "children": [
+    {"name": "Jimmy Smith", "age": 15},
+    {"name": "Jimmy Smith", "age": 15},
+    {"name": "Sammy Sosa", "age": 12}
+  ]
+}
+```
+
+### 序列的序列
+
+```yaml
+my_sequences:
+  - [1, 2, 3]
+  - [4, 5, 6]
+  -  
+    - 7
+    - 8
+    - 9
+    - 0 
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "my_sequences": [
+    [1, 2, 3],
+    [4, 5, 6],
+    [7, 8, 9, 0]
+  ]
+}
+```
+
+### 映射的映射
+
+```yaml
+Mark McGwire: {hr: 65, avg: 0.278}
+Sammy Sosa: {
+    hr: 63,
+    avg: 0.288
+  }
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "Mark McGwire": {
+    "hr": 65,
+    "avg": 0.278
+  },
+  "Sammy Sosa": {
+    "hr": 63,
+    "avg": 0.288
+  }
+}
+```
+
+### 嵌套集合
+
+```yaml
+Jack:
+  id: 1
+  name: Franc
+  salary: 25000
+  hobby:
+    - a
+    - b
+  location: {country: "A", city: "A-A"}
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "Jack": {
+    "id": 1,
+    "name": "Franc",
+    "salary": 25000,
+    "hobby": ["a", "b"],
+    "location": {
+        "country": "A", "city": "A-A"
+    }
+  }
+}
+```
+
+### 无序集
+
+```yaml
+set1: !!set
+  ? one
+  ? two
+set2: !!set {'one', "two"}
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "set1": {"one": null, "two": null},
+  "set2": {"one": null, "two": null}
+}
+```
+
+集合表示为一个映射,其中每个键都与一个空值相关联
+
+
+### 有序映射
+
+```yaml
+ordered: !!omap
+- Mark McGwire: 65
+- Sammy Sosa: 63
+- Ken Griffy: 58
+```
+
+#### ↓ 等效的 JSON
+
+```json
+{
+  "ordered": [
+     {"Mark McGwire": 65},
+     {"Sammy Sosa": 63},
+     {"Ken Griffy": 58}
+  ]
+}
+```
+
+YAML 参考
+--------------
+
+### 条款
+
+- 序列又名数组或列表
+- 标量又名字符串或数字
+- 映射又名哈希或字典
+
+
+基于 YAML.org [refcard](https://yaml.org/refcard.html)。
+
+### 文档指标
+
+:- | :-
+:- | :-
+`%`   | 指令指标
+`---` | 文档标题
+`...` | 文档终结者
+
+### 收集指标
+
+
+:- | :-
+:- | :-
+`?`  | 关键指标
+`:`  | 价值指标
+`-`  | 嵌套系列条目指示器
+`,`  | 单独的内联分支条目
+`[]` | 环绕串联系列分支
+`{}` | 环绕在线键控分支
+
+### 别名指标
+
+:- | :-
+:- | :-
+`&` | 锚属性
+`*` | 别名指示符
+
+### 特殊键
+
+:- | :-
+:- | :-
+`=`  | 默认“值”映射键
+`<<` | 合并来自另一个映射的键
+
+### 标量指标
+
+:- | :-
+:- | :-
+`''`  | 环绕内联未转义标量
+`"`   | 环绕内嵌转义标量
+`|`   | 块标量指示器
+`>`   | 折叠标量指示器
+`-`   | 剥离 chomp 修饰符(`|-` 或 `>-`)
+`+`   | 保留 chomp 修饰符(`|+` 或 `>+`)
+`1-9` | 显式缩进修饰符(`|1` 或 `>2`)。 
 修饰符可以组合(`|2-`, `>+1`)
+
+### 标签属性(通常未指定)
+
+
+:- | :-
+:- | :-
+`none`   | 未指定的标签(由应用程序自动解析)
+`!`      | 非特定标签(默认情况下,`!!map`/`!!seq`/`!!str`)
+`!foo`   | 主要(按照惯例,表示本地 `!foo` 标记)
+`!!foo`  | 次要的(按照惯例,表示 `tag:yaml.org,2002:foo`)
+`!h!foo` | 需要 `%TAG !h! `(然后表示 `foo`)
+`!` | 逐字标记(始终表示“foo”)
+
+### 杂项指标
+
+|     |                             |
+|-----|-----------------------------|
+| `#` | 一次性评论指示器 |
+| \`@ | 两者都保留供将来使用 |
+
+
+### 核心类型(默认自动标签)
+
+
+|         |                                          |
+|---------|------------------------------------------|
+| `!!map` | `{Hash table, dictionary, mapping}`      |
+| `!!seq` | `{List, array, tuple, vector, sequence}` |
+| `!!str` | Unicode 字符串                            |
+
+### 转义码
+
+
+#### Numeric
+
+- `\x12` (8-bit)
+- `\u1234` (16-bit)
+- `\U00102030` (32-bit)
+
+
+#### Protective
+
+- `\\` (\\)
+- `\"` (")
+- `\ ` ( )
+- `\` (TAB)
+
+
+#### C
+- `\0` (NUL)
+- `\a` (BEL)
+- `\b` (BS)
+- `\f` (FF)
+- `\n` (LF)
+- `\r` (CR)
+- `\t` (TAB)
+- `\v` (VTAB)
+
+
+#### 额外的
+
+- `\e` (ESC)
+- `\_` (NBSP)
+- `\N` (NEL)
+- `\L` (LS)
+- `\P` (PS)
+
+  
+### 更多类型
+
+|          |                             |
+|----------|-----------------------------|
+| `!!set`  | `{cherries, plums, apples}` |
+| `!!omap` | `[one: 1, two: 2]`          |
+
+### 与语言无关的标量类型
+
+
+|                           |                                            |
+|---------------------------|--------------------------------------------|
+| `{~, null}`               | 空(无值)。 |
+| `[1234, 0x4D2, 02333]`    | [十进制整数、十六进制整数、八进制整数] |
+| `[1_230.15, 12.3015e+02]` | [固定浮点数,指数浮点数] |
+| `[.inf, -.Inf, .NAN]`     | [无穷大(浮点数),负数,不是数字] |
+| `{Y, true, Yes, ON}`      | 布尔真 |
+| `{n, FALSE, No, off}`     | 布尔假 |
+
+另见
+---
+
+- [YAML Reference Card](https://yaml.org/refcard.html) _(yaml.org)_
+- [Learn X in Y minutes](https://learnxinyminutes.com/docs/yaml/) _(learnxinyminutes.com)_
+- [YAML lint online](http://www.yamllint.com/) _(yamllint.com)_
\ No newline at end of file
diff --git a/scripts/assets/yaml.svg b/scripts/assets/yaml.svg
new file mode 100644
index 0000000..d49ae20
--- /dev/null
+++ b/scripts/assets/yaml.svg
@@ -0,0 +1,6 @@
+
\ No newline at end of file