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