# Yaml 语法学习

**EcoX** 系列插件全部使用 **Yaml** 文件储存，学习 **Yaml** 语法是一个必须课，在此我们简单的介绍一下。

**Yaml** 的基本语法格式是 `键: 值`（也就是 `key: value`），例如 `raytrace-distance: 80`。需要注意以下几点：

* 大小写敏感。（由于是插件自动生成的，你也几乎不用考虑点这一点）
* 键与值用 `:` 分开，请注意不是单独的一个 **英文冒号**，而不是一个英文冒号加一个空格。
* 当值中有 `:、&` 等特殊符号时，应该将值的前后用 `'值'` 或者 `"值"` 符号将其囊括，例如 `curse-color: '&c'`。
* 当值中有 `'` 符号时，使用 `''` 代替它，例如 `cannot-afford-type: '&cYou can''t afford to do this! &fCost: &a%cost% %type%'`。（我们可以看到 `can't` 在这里写为 `can''t`）

上面的基本语法格式为普通类型，**EcoX** 中还常用 **List** 类型，它的语法格式为：

```
键:
- 值1
- 值2
- 值3
```

或者

```
键:
  - 值1
  - 值2
  - 值3
```

需要注意的是：

* 第二种表述方法，在其前面仅加了 **2** 个空格。这个空格数量不能多，也不能少，必须是 **2** 个。

例如：

```
targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
```

### 缩进

无论你是普通类型还是 **List** 类型，你都需要注意一点，就是值也有可能是其他的选项，也就是子选项的缩进。

缩进的一般语法格式为：

```
键1:
  键2: 值1
  键3: 值2
  键4: 
    - 值3
    - 值4
    - 值5
```

键2、键3、键4都在本教程理解为键1的子选项，需要和键1保持 **2** 个空格的距离。

例如：

```
general-config:
  targets:
  - pickaxe
  - sword
  - axe
  - elytra
  - bow
  - crossbow
  - trident
  - boots
  grindstoneable: true
  disabled-in-worlds: []
```

当遇到自己辛辛苦苦编写配置后插件不加载，确定是自己配置的问题以后，就可以检查你的 **Yaml** 语法格式是否正确。

我们可以前往 [这个网站](https://verytoolz.com/yaml-validator.html)，在左边复制好自己的 **Yaml** 文本后点击中间的 **Yaml 验证** 即可，当右边出现 **Valid YAML** 时即代表你的语法格式无误，如下图：

![](https://1370664756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FObkS9GBaWEafgp7ydEEU%2Fuploads%2FU9G7lKrhxKPEhkXu5oph%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084733.png?alt=media\&token=d46e1b4b-fe32-4608-a181-e0c0c2371927)

遇到下面这种情况即为有语法错误，并且会将行数告诉你（即 **line 41**，代表第 41 行错误），在这里是因为第 **2** 行缺失另外一个 `'` 符号，导致计算机一直读取到最后也没读到下一个 `'` 符号，所以即在此报错，因此你还需要根据报错的内容来判断是什么问题。

![](https://1370664756-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FObkS9GBaWEafgp7ydEEU%2Fuploads%2FoPtRahjmSdRxIBT0QvX3%2F%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE%202022-07-25%20084856.png?alt=media\&token=d999c794-b9b5-4f0b-befd-836fe1e98ddf)

### 空值

有时插件生成的配置我们根本不想用，但是它自己生成了，删除了又怕插件出问题，这时可以使用空值判断一下我们能否删除它。

在上面所给的示例配置中，出现了大量 `键: []` 的这种情况，这种情况即代表这个配置实际上是可以删除的，删除即使用默认值，一般是空值。在下面的学习之旅中，我们会大量使用空值。
