gpt4 book ai didi

yaml - 如何自动重新缩进 YAML 文件?

转载 作者:行者123 更新时间:2023-12-03 16:16:55 27 4
gpt4 key购买 nike

让我们考虑这个例子:

---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none

如果我决定重新缩进所有内容并从这里开始:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none

我没有足够的信息来做这件事。实际上vim的尝试是这样的:
---
foo:
alice: female
bob: male
bar:
- node: 42
name: none
- node: 43
name: none

Ansible 也无法做到:
---
foo:

alice: female
bob: male
bar:

- node: 42
name: none
- node: 43
name: none

我认为一种可能的解决方法是在增加缩进时添加一个空行:
---
foo:

alice: female
bob: male
bar:

- node: 42
name: none
- node: 43
name: none

在我看来,YAML 的主要问题是人们仍在与制表符、空格和缩进大小作斗争。对于多人编辑的大型 YAML 文件,无法再正确解析生成的文件。我看到的两个解决方案是:
  • 仅使用制表符并强制制表符标识,因为 Makefile
  • 就是这种情况
  • 以上解决方案
  • 最佳答案

    您似乎想要做的是确保您的 YAML 文件统一缩进(例如,在 checkin 修订控制系统之前)。如果您将结构弄平,那么您将缩进然后重新缩进的想法将不起作用,因为您会丢失信息。这:

    foo:
    alice: female
    bob: male

    由两个映射组成:一个具有一个键的映射和一个将两个键映射到两个值的值。

    这:
    foo:
    alice: female
    bob: male

    是一个具有三个键的映射,键 foo 的值是空标量(除了空字符串外,也可写,如 YAML 文件中的 ~NULLnull )。

    大多数 YAML 解析器在将文件读入内部数据时会丢失信息:
  • 评论被删除
  • 不为映射保留键顺序
  • 标量周围的额外空格未保留

  • ruamel.yaml Python 包(我是其作者)是一个增强的解析器,它允许将 YAML 文件往返传输到数据并返回到 YAML 以保留更多原始信息。它将保留注释和键顺序,但它会删除例如单线标量周围的额外间距。

    这种往返通常会在第二次往返时稳定下来,因此这可用于重新缩进 YAML 文件。 yaml 包中包含的 ruamel.yaml.cmd 实用程序可以用于此目的,而无需自己编程:
    yaml round-trip your_file.yml --verbose

    ( round-trip 可以缩短为 rt )将检查文件是否以及如何更改。如果确实发生了变化,它会显示 unified diff。基于此,您可以决定在文件稳定时保存文件:
    yaml round-trip your_file.yml --save
    example.yml 的输出:
    ---
    foo:
    alice: female # verified
    bob: male
    bar:
    - node: 42
    name: none
    - node: 43
    name: none

    将会:
    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

    保存后看起来像:
    ---
    foo:
    alice: female # verified
    bob: male
    bar:
    - node: 42
    name: none
    - node: 43
    name: none

    缩进级别默认为 2,但可以通过一个选项设置为 yaml

    关于yaml - 如何自动重新缩进 YAML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30642317/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com