Sublime Text原生不支持将不规则键值对直接格式化为TOML,因其无法自动识别未声明表结构、混用空白符或含注释的文本为TOML;必须先手动绑定语法(如通过右下角选“Open all with current extension as…→Toml”)使插件加载,再配合正则替换与人工补全表头、数组结构,并用Python toml.loads()验证合法性。

为什么不能直接用“格式化”命令转成 TOML
Sublime Text 原生不识别不规则键值对(比如 key = value 但无方括号、无表头、混用空格/制表符、带注释或空行)为 TOML 语法。所谓“自动格式化”只对已识别为 TOML 的文件生效,而这类脚本默认被当 Plain Text 处理——连高亮都没有,更别说解析结构了。你点 Ctrl+Shift+P → Format Document,大概率没反应,或报错 No formatter available for 'Plain Text'。
必须先让 Sublime 认出这是 TOML 内容
这不是装插件就能跳过的步骤。即使你已安装 Toml 插件(作者 tamasfeher),它也不会主动扫描内容猜语法。你得手动绑定后缀或强制指定语言:
- 如果文件有
.toml后缀:打开它 → 右下角点击Plain Text→ 选Open all with current extension as… → Toml - 如果只是临时粘贴的一段键值对(无后缀):先
Ctrl+N新建空白文件 →Ctrl+Shift+P输入Set Syntax: TOML回车 → 粘贴内容 - 验证是否生效:光标放在任意
key =行,按Ctrl+Shift+P输入Toml,能看到相关命令(如Toml: Validate)才说明语法引擎加载成功
靠正则 + 多光标补全表头和缩进才真正可行
TOML 要求显式声明表([section])、子表([[array]])、键值对需对齐且不能跨行。不规则脚本通常缺这些。别指望插件自动补——Toml 插件只做高亮和基础校验,不提供结构重构功能。你得自己动手:
- 用
Ctrl+H打开替换面板,勾选Regular Expression,查找^([a-zA-Z_][a-zA-Z0-9_]*)\s*=\s*(.+)$,替换为$1 = $2(统一空格) - 把逻辑上属于同一组的键(比如都以
db.开头)选中 →Ctrl+Shift+L拆成多光标 → 在每行开头输入[db]→ 按→移到等号前 →Backspace删掉db.前缀 - 对数组项(如
hosts = ["a", "b"])要小心:TOML 数组必须用[[section]]表示每个元素,不能只靠 JSON 风格数组。得手动拆成多个[[host]]块并逐字段展开
验证 TOML 是否合法比格式化更重要
写完别急着保存。TOML v1.0 对嵌套表、点分键(parent.child.key)、数组内联写法非常敏感,一个多余的逗号或错位的引号就会让 toml.load() 报错。最简验证方式:
- 在终端运行:
python -c "import toml; print(toml.loads(open('config.toml').read()))" - 如果报
toml.decoder.TomlDecodeError,错误信息里会指出第几行、哪个字符非法——Sublime 里直接跳转到对应行即可 - 注意:中文键名必须加引号(
"数据库端口" = 3306),否则解析失败;布尔值必须小写(enabled = true,不是True或YES)
真正卡住人的从来不是怎么写,而是 TOML 的语义约束太硬——它不像 JSON 那样容忍空格或末尾逗号,也不像 INI 那样允许随意嵌套。每补一个 [section],都要确认它和下个键之间有没有空行、缩进是否一致、子表是否用了双括号。这些细节不肉眼核对,仅靠工具根本绕不过去。


















