如果我在 YAML 中每个缩进级别使用一个空格,两个或四个空格,有什么区别吗?
每种结构类型的空间编号是否有任何特定规则?
例如 4 用于嵌套地图, 1 空间/ 列表项等空间
我正在为弹性beanstalk .ebextensions编写一个yaml配置文件,我很难正确构建它。虽然我在YAML Validator中有有效的yaml弹性豆茎似乎理解了不同的结构。
答案 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块样式中,结构由缩进确定。通常,缩进定义为一行开头的零个或多个空格字符。
为保持可移植性,不得在缩进中使用制表符,因为不同的系统对制表符的处理方式有所不同。请注意,大多数现代编辑器都可以配置为按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
中了解更多信息