让我们考虑这个例子:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
如果我决定重新压缩所有内容并从这里开始:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
我没有足够的信息来做这件事。实际上vim的尝试是这样的:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
Ansible 也无法做到:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
我认为一种可能的解决方法是在增加缩进时添加一个空行:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
在我看来,YAML 的主要问题是人们仍在与制表符、空格和缩进大小作斗争。对于多人编辑的大型 YAML 文件,无法再正确解析生成的文件。我看到的两个解决方案是:
您似乎想要做的是确保您的 YAML 文件统一缩进(例如,在被检入修订控制系统之前)。如果您将结构弄平,那么您将缩进然后重新缩进的想法将不起作用,因为您会丢失信息。这个:
foo:
alice: female
bob: male
Run Code Online (Sandbox Code Playgroud)
由两个映射组成:一个具有一个键的映射和一个将两个键映射到两个值的值。
这个:
foo:
alice: female
bob: male
Run Code Online (Sandbox Code Playgroud)
是一对一映射有三个键,并且键foo具有值作为空标量(也可写的,除了空字符串,如~,NULL,null在YAML文件)。
大多数 YAML 解析器在将文件读入内部数据时会丢失信息:
该ruamel.yaml Python包(其中我的作者)是enhancemed解析器来允许往返YAML文件的数据和回YAML保留更多的原始信息。它将保留注释和键顺序,但它会减少例如单行标量周围的额外间距。
这种往返通常在第二次往返时稳定下来,因此这可用于重新缩进 YAML 文件。yaml包中包含的实用程序ruamel.yaml.cmd,无需自己编程即可用于此目的:
yaml round-trip your_file.yml --verbose
Run Code Online (Sandbox Code Playgroud)
(round-trip可以缩短为rt) 将检查文件是否以及如何更改。如果确实发生了变化,它会显示一个统一的差异。基于此,您可以决定在文件稳定时保存文件:
yaml round-trip your_file.yml --save
Run Code Online (Sandbox Code Playgroud)
的输出example.yml:
---
foo:
alice: female # verified
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
将是:
example.yml:
stabilzes on second round trip, ok without comments
--- example.yml
+++ round trip YAML
@@ -1,9 +1,9 @@
---
foo:
alice: female # verified
- bob: male
+ bob: male
bar:
-- node: 42
+- node: 42
name: none
-- node: 43
- name: none
+- node: 43
+ name: none
Run Code Online (Sandbox Code Playgroud)
保存后看起来像:
---
foo:
alice: female # verified
bob: male
bar:
- node: 42
name: none
- node: 43
name: none
Run Code Online (Sandbox Code Playgroud)
缩进级别默认为 2,但可以通过选项设置为yaml。
| 归档时间: |
|
| 查看次数: |
16452 次 |
| 最近记录: |