【问题标题】:YAML How many spaces per indent?YAML 每个缩进多少个空格?
【发布时间】:2017-07-04 00:07:16
【问题描述】:

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

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

例如 4 个用于嵌套 ma​​ps 的空间,每个 列表项 1 个空间等等??

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

【问题讨论】:

  • 虽然 specs 告诉我们即使缩进一个空格也可以,但如果工具期望至少缩进 2 个空格,我不会太惊讶。

标签: ruby yaml amazon-elastic-beanstalk


【解决方案1】:

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

【讨论】:

  • 只有我一个人在定义一个键是否嵌套有困难吗?即使是上面的小例子也需要我非常仔细地查看f 是在a 级别还是b 级别。我真的不喜欢这种语法。
  • @Bartosz 好吧,没有人(我希望)使用一个空格来缩进,这个例子只是学术性的。适当的代码编辑器将为您提供缩进指南,这对于较大的文件确实是必需的。如果你不喜欢它,你总是可以使用 flow-style 而不是 indentation-based 块样式。
【解决方案2】:

YAML spec for v 1.2 只是这么说

在 YAML 块样式中,结构由缩进决定。通常,缩进定义为在行首有零个或多个空格字符。

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

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

因此,您可以根据自己的喜好设置缩进深度,只要您使用空格而不是制表符即可。有趣的是,IntelliJ 默认使用 2 个空格。

【讨论】:

    【解决方案3】:

    缩进 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
    

    请注意,虽然每个级别的缩进是两个空格,但对于上下文和默认选项下的值,缩进是四个空格。如果仅使用两个空格进行缩进,则这些键将被视为包含上下文键的同一字典的一部分,因此无法正确加载数据。如果不希望使用双缩进,则可以使用花括号声明深度嵌套的 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阅读更多内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多