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` 这样的值可以不加引号照原样写下。

使用方法

  1. 贴入 TOML `Cargo.toml` 或 `pyproject.toml` 的内容可原样贴入。
  2. 查看判定 **语法完好会标为有效的 TOML;若不通过,则指出出问题的那一行。**
  3. 阅读整理后的结果 键与值会对齐,表与表之间的界限也变得一目了然。
  4. 复制回去 整理后的内容可原封不动地写回文件。

用好本工具的小技巧

  • 内联数组和内联表仅支持写在一行内的形式。如果数组跨越多行,请先合并为一行再粘贴。
  • 格式化结果会将「=」两侧统一为一个半角空格,并将数组/内联表的分隔符统一为「, 」,从而消除不同书写者之间的格式差异。
  • 注释(# 之后的内容)会被保留,唯一的改动是在「#」之后缺少空格时补上一个空格,改动幅度很小。
  • 连续的空行会被合并为一行输出,让各个表格之间的分界更容易辨认。
  • 本工具的所有处理都在浏览器内完成,您粘贴的配置内容不会被发送到任何服务器。

这些场景会用到

查找配置文件里的差错

**把表标题放错位置,会悄然改变某个键的归属,而这正是肉眼极少能逮住的一类错误。**

阅读 Rust 与 Python 的项目设置

整理 `Cargo.toml` 或 `pyproject.toml` 后,依赖之间的分界便容易顺下来。

核对由别的格式改写来的内容

由 JSON 或 YAML 改写的设置,可当场检验语法是否说得通。

统一团队的写法

提交前整理一遍,可把无关的空白差异挡在差异之外,只留下真正的改动。

TOML 的术语

表
写在方括号里的标题,如 `[package]`,**它把从此处到下一个标题之间的键聚成一组。**
表数组
以双重方括号写作 `[[dependencies]]` 的记法。重复同一标题,数组便多出一个元素。
内联表
写成一行的表,如 `{ a = 1, b = 2 }`。**它适合简短的设置,却不能跨行拆开。**
基本字符串
用双引号括起的字符串,其中 `\n` 之类的转义是生效的。
字面字符串
用单引号括起的字符串。**其中任何转义都不生效,因而最适合写 Windows 路径与正则表达式。**
日期时间
TOML 原生提供的类型。像 `1979-05-27T07:32:00Z` 这样的日期或时间可以不加引号写出。

常见问题

如果内容以简单的键值对为主,且由多人共同编辑(如依赖关系定义),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 之间做出取舍。