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 的格式化与语法检查
TOML 是为配置文件而设计的格式,其长处正在于只需罗列 `key = value` 的那份朴素。本工具会把您贴入的 TOML 整理排版,并同时判定语法是否说得通;一旦有破损,便指出出问题的行。
**在 TOML 上最容易绊倒人的一点是:结构来自写作 `[表名]` 的标题行,而非缩进。** 惯用 YAML 的人往往伸手去用缩进表达层级,可在 TOML 里缩进毫无意义——**写在一个表标题与下一个标题之间的键,便归属于那个表。** 换言之,一行所处的位置正是结构的决定者。另一个特点是把日期与时间当作一等类型,像 `2026-09-20T10:00:00Z` 这样的值可以不加引号照原样写下。
使用方法
- 贴入 TOML `Cargo.toml` 或 `pyproject.toml` 的内容可原样贴入。
- 查看判定 **语法完好会标为有效的 TOML;若不通过,则指出出问题的那一行。**
- 阅读整理后的结果 键与值会对齐,表与表之间的界限也变得一目了然。
- 复制回去 整理后的内容可原封不动地写回文件。
用好本工具的小技巧
- 内联数组和内联表仅支持写在一行内的形式。如果数组跨越多行,请先合并为一行再粘贴。
- 格式化结果会将「=」两侧统一为一个半角空格,并将数组/内联表的分隔符统一为「, 」,从而消除不同书写者之间的格式差异。
- 注释(# 之后的内容)会被保留,唯一的改动是在「#」之后缺少空格时补上一个空格,改动幅度很小。
- 连续的空行会被合并为一行输出,让各个表格之间的分界更容易辨认。
- 本工具的所有处理都在浏览器内完成,您粘贴的配置内容不会被发送到任何服务器。
这些场景会用到
查找配置文件里的差错
**把表标题放错位置,会悄然改变某个键的归属,而这正是肉眼极少能逮住的一类错误。**
阅读 Rust 与 Python 的项目设置
整理 `Cargo.toml` 或 `pyproject.toml` 后,依赖之间的分界便容易顺下来。
核对由别的格式改写来的内容
由 JSON 或 YAML 改写的设置,可当场检验语法是否说得通。
统一团队的写法
提交前整理一遍,可把无关的空白差异挡在差异之外,只留下真正的改动。
TOML 的术语
- 表
- 写在方括号里的标题,如 `[package]`,**它把从此处到下一个标题之间的键聚成一组。**
- 表数组
- 以双重方括号写作 `[[dependencies]]` 的记法。重复同一标题,数组便多出一个元素。
- 内联表
- 写成一行的表,如 `{ a = 1, b = 2 }`。**它适合简短的设置,却不能跨行拆开。**
- 基本字符串
- 用双引号括起的字符串,其中 `\n` 之类的转义是生效的。
- 字面字符串
- 用单引号括起的字符串。**其中任何转义都不生效,因而最适合写 Windows 路径与正则表达式。**
- 日期时间
- TOML 原生提供的类型。像 `1979-05-27T07:32:00Z` 这样的日期或时间可以不加引号写出。
常见问题
[[section]] 表头,但不会像完整的 TOML→JSON 转换器那样,把同名的多个表格合并成一个数组对象。对于复杂的表格数组结构,建议直接查看逐行格式化后的结果来确认。"""...""" 与 '''...''',对应的行会被判定为错误。如需处理长文本,请先转换为可写在一行内的转义字符串格式。
闲话 ― 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 之间做出取舍。