TOML 格式化工具
格式化并校验 TOML(Tom's Obvious, Minimal Language)。整齐对齐 key = value、表格与数组,并以行号提示语法错误。
TOML 的主要数据类型
| 类型 | 示例写法 | 说明 |
|---|---|---|
| 字符串(基本) | "hello" | 用双引号括起来,支持 \n、\t 等转义序列。 |
| 字符串(字面量) | 'C:\path' | 用单引号括起来,完全不进行转义处理,适合包含反斜杠的路径字符串。 |
| 整数 | 42 | 默认十进制,也支持 0x(十六进制)・0o(八进制)・0b(二进制),以及 1_000 这样的下划线分隔。 |
| 浮点数 | 3.14 | 指数记法(1e10)以及 inf・nan 也是有效值。 |
| 布尔值 | true | true 或 false 二选一,首字母大写(True)无效。 |
| 数组 | [1, 2, 3] | 在方括号内用逗号分隔多个值,允许末尾逗号。 |
| 表格 | [server] | 表头之后出现的所有 key = value 都属于该表格的子项。 |
| 表格数组 | [[fruits-basket]] | 通过重复同名表格来表示数组(例如多个依赖包的定义)。 |
| 日期/时间 | 1979-05-27T07:32:00Z | RFC 3339 格式,是唯一可以不加引号书写的复合类型值。 |
使用技巧
- 内联数组和内联表仅支持写在一行内的形式。如果数组跨越多行,请先合并为一行再粘贴。
- 格式化结果会将「=」两侧统一为一个半角空格,并将数组/内联表的分隔符统一为「, 」,从而消除不同书写者之间的格式差异。
- 注释(# 之后的内容)会被保留,唯一的改动是在「#」之后缺少空格时补上一个空格,改动幅度很小。
- 连续的空行会被合并为一行输出,让各个表格之间的分界更容易辨认。
- 本工具的所有处理都在浏览器内完成,您粘贴的配置内容不会被发送到任何服务器。
常见问题
如果内容以简单的键值对为主,且由多人共同编辑(如依赖关系定义),TOML 更合适,因为缩进失误很少会破坏结构。如果需要深层嵌套或在一个文件中组合多份文档,YAML 的表现力更强。
本工具会正确格式化每一个
[[section]] 表头,但不会像完整的 TOML→JSON 转换器那样,把同名的多个表格合并成一个数组对象。对于复杂的表格数组结构,建议直接查看逐行格式化后的结果来确认。本工具会按 RFC 3339 语法识别并原样输出该值,但不会校验其在日历上是否真实存在(例如「2 月 30 日」这样的非法日期)。如需严格的日期校验,请另行确认。
目前尚不支持
"""...""" 与 '''...''',对应的行会被判定为错误。如需处理长文本,请先转换为可写在一行内的转义字符串格式。不会。所有格式化处理都在您的浏览器内通过 JavaScript 完成,不会发送到服务器或被保存,因此即使配置文件中包含凭据信息也可以放心使用。
闲话 ― TOML 为何成为配置文件的「通用语言」
TOML 由 GitHub 联合创始人 Tom Preston-Werner 于 2013 年提出,其全称「Tom's Obvious, Minimal Language」直接体现了设计理念:既要像 JSON 一样便于机器解析,也要让人类可以毫无歧义地直接阅读和书写。
真正让 TOML 普及开来的关键,是 Rust 的包管理器 Cargo 采用 Cargo.toml 作为其配置文件格式。此后,Python 的 PEP 518 又引入了 pyproject.toml 作为打包标准,将此前 setup.py、setup.cfg、requirements.txt 各自为政的局面统一了起来。
TOML 与 YAML 最大的区别在于「不赋予缩进任何意义」。YAML 中细微的缩进偏差很容易导致语法错误或数据结构被误解析,而 TOML 仅通过 [section] 与 key = value 的组合来表达层级,因此复制粘贴导致的失误相对更少。
不过 TOML 的表现力也因此略逊于 YAML:它没有用于复用数值的锚点/别名机制,书写深层嵌套结构也偏繁琐,实际工作中往往需要根据数据结构在 TOML、YAML、JSON 之间做出取舍。