YAML 格式化工具

粘贴 YAML,最多 1,000,000 个字符、100 个文档。格式化在此浏览器中完成。

YAML 对语法宽容,对缩进却毫不留情。一个空格的偏差就能悄悄把键变成列表项,而混乱的缩进会让代码评审苦不堪言。这个格式化工具直接在你的浏览器中用 js-yaml 引擎(YAML 1.2 核心模式)解析输入,再按你选择的缩进、集合风格、引号方式、键顺序和行宽重新输出,让配置在版本控制中 diff 干净,并在不同贡献者之间保持可读。

如何格式化 YAML

  1. 1

    粘贴 YAML

    最多 1,000,000 个字符,一个文档流中最多 100 个文档。不会上传任何内容:解析在你的浏览器中运行。

  2. 2

    选择选项

    缩进宽度、块式或流式风格、引号方式、键排序和行宽。

  3. 3

    格式化

    工具会以规范的间距和你选定的风格重建每个文档。

  4. 4

    复制并提交

    输出是结构完全相同的 YAML,可以直接粘贴回你的配置。

前后对比

杂乱的输入:

server:
  port:   8080
  hosts: ["api.example.com",  "api2.example.com"]
  timeout:  30
  debug: true

格式化后(2 个空格,块式):

server:
  port: 8080
  hosts:
    - api.example.com
    - api2.example.com
  timeout: 30
  debug: true

格式化选项

选项 可选值 默认值
缩进宽度 2、4 2
集合风格 块式、流式 块式
引号方式 最少引号、双引号、单引号 最少引号
键排序 原始顺序、字母顺序 原始顺序
行宽 80、120、不限 120

引号规则

最少引号通常正是你想要的:字符串保持不加引号,除非裸写会带来风险。以下情况格式化工具会自动加引号:

  • 写成字符串的旧式布尔值:yesnoonoffyn。YAML 1.2 已经把它们当作字符串读取,但很多解析器仍遵循 YAML 1.1,不加引号的 no 会变成 false。格式化工具在输出中始终给它们加引号,这样著名的挪威 bug(国家列表里的 NO 被读成 false)就不会坑到使用你文件的任何一方。
  • 写成字符串的数字:'007''3.14'。不加引号会被解析成整数或浮点数。
  • 含有 :#[{ 等字符或以空白开头的字符串,裸写输出会改变结构。

每次运行都会做的清理

  • 行尾空白。 会被去除。
  • 混乱或不规则的缩进。 统一为你选择的缩进宽度。
  • 集合内部的空行。 会被移除。
  • 缩进中的制表符。 YAML 禁止制表符;解析器会拒绝这样的输入,并给出指明所在行的清晰错误,让你可以先修复,而不是交付一份其他解析器都会拒绝的文件。

注释、锚点与合并键

格式化会规范化文档模型,在提交之前有几个限制值得了解:

  • 注释会被移除。 解析器会把文档解析成数据,因此 # 注释无法在格式化后保留。如果注释很重要,请先保留一份副本。
  • 锚点和别名会被解析。 通过别名共享的节点仍然保持共享,但会以 &ref_0 这样自动生成的名称重新输出;原始锚点名不会保留。
  • 合并键(<<:)会被解析,展开成包含合并后值的普通映射。

多文档流

支持包含多个文档的流:每个文档会被独立格式化,再用 --- 分隔符重新连接,每次最多处理 100 个文档。

常见问题

结构和值保持完全一致:变化的只有呈现方式(缩进、引号、流式或块式,以及启用排序后的键顺序)。按照设计,有两样东西不会保留:注释会被移除,锚点名称会被重新生成。

当裸写的字符串会被解析成其他类型时,为安全起见必须加引号。常见情况:纯数字的键或值、含 :# 的字符串,以及 yesno 这类会被 YAML 1.1 解析器读成 true/false 的旧式布尔值。

不能。风格选项作用于整个文档:块式会把每个集合展开成独立的行,流式则把集合内联呈现。如果需要对比,可以用不同的选项各格式化一次。

不会。解析和格式化都在你的浏览器中用内置的 js-yaml 引擎完成。你的 YAML 不会发送到服务器,不会被存储,也不会添加到页面地址中;它只保留在当前浏览器会话里,以便分步视图能够展示你的结果。

相关工具