YAML每个缩进多少个空格?

时间:2017-02-15 11:03:17

标签: ruby yaml elastic-beanstalk

如果我在 YAML 中每个缩进级别使用一个空格,两个或四个空格,有什么区别吗?

每种结构类型的空间编号是否有任何特定规则?

例如 4 用于嵌套地图 1 空间/ 列表项等空间

我正在为弹性beanstalk .ebextensions编写一个yaml配置文件,我很难正确构建它。虽然我在YAML Validator中有有效的yaml弹性豆茎似乎理解了不同的结构。

3 个答案:

答案 0 :(得分:26)

YAML没有要求缩进任何具体数量的空格。也没有要求保持一致。例如,这是有效的YAML:

a:
 b:
     - c
     -  d
     - e
f:
    "ghi"

可能会对某些规则感兴趣:

  • 流内容(即以{[开头的所有内容)可以跨越多行,但必须至少缩进与周围当前块级别一样多的空格。
  • 阻止列表项可以(但不需要)与周围的块级具有相同的缩进,因为-被认为是缩进的一部分:
a:    # top-level key
- b   # value of that key, which is a list
- c
c:    # next top-level key
 d    # non-list value which must be more indented

答案 1 :(得分:7)

YAML spec for v 1.2只是说

在YAML块样式中,结构由缩进确定。通常,缩进定义为一行开头的零个或多个空格字符。

为保持可移植性,不得在缩进中使用制表符,因为不同的系统对制表符的处理方式有所不同。请注意,大多数现代编辑器都可以配置为按Tab键可插入适当数量的空格。

缩进量是表示细节,不能用于传达内容信息。

因此,只要您使用空格而不是制表符,就可以将缩进深度设置为您的首选项。有趣的是,IntelliJ默认使用2个空格。

答案 2 :(得分:1)

指示 对于YAML文件,建议的语法是使用2个空格进行缩进,但是YAML将遵循单个文件使用的任何缩进系统。鉴于数据是统一的且没有深度嵌套,因此对于SLS文件,两个空格的缩进效果很好。

嵌套词典 当字典嵌套在其他数据结构(特别是列表)中时,缩进逻辑有时会更改。发生这种情况的示例包括file.managed状态的上下文和默认选项:

/etc/http/conf/http.conf:
file:
  - managed
  - source: salt://apache/http.conf
  - user: root
  - group: root
  - mode: 644
  - template: jinja
  - context:
      custom_var: "override"
  - defaults:
      custom_var: "default value"
      other_var: 123

请注意,虽然缩进每个级别有两个空格,但是对于context和defaults选项下的值,有四个空格的缩进。如果仅使用两个空格来缩进,则这些键将被视为包含上下文键的同一词典的一部分,因此将无法正确加载数据。如果不希望使用双缩进,则可以使用花括号声明深层嵌套的dict:

/etc/http/conf/http.conf:
file:
  - managed
  - source: salt://apache/http.conf
  - user: root
  - group: root
  - mode: 644
  - template: jinja
  - context: {
    custom_var: "override" }
  - defaults: {
    custom_var: "default value",
    other_var: 123 }

您可以从此link

中了解更多信息