sublime text 无法原生读取 .cson 文件,因其配置系统基于 python 的 json/yaml 模块,不含 coffeescript 运行时;复用 atom 的 cson 配置需先转为 json 再手动适配为 sublime 原生格式(如 .sublime-snippet xml),且注释会丢失。

Sublime Text 本身不支持直接加载或解析 .cson 文件——它只认 JSON、YAML(需插件)、XML 和原生的 .sublime-settings、.sublime-keymap 等格式。所谓“配合 CSON”本质上是人为桥接,不是内置能力。
为什么 Sublime Text 无法原生读取 CSON
CSON 是 CoffeeScript 的语法糖,本质是 JavaScript 对象字面量经 CoffeeScript 编译器转译后的产物。Sublime Text 的配置系统基于 Python 的 json 模块(或 yaml,当装了 YAML 插件时),不带 CoffeeScript 运行时,也不可能在启动时执行任意 JS 代码。
常见误解来源:有人把 Atom 的 snippets.cson 直接丢进 Sublime 的 Packages/User/ 下,发现没生效——这不是配置错,是根本不会被加载。
-
.cson文件对 Sublime 来说只是普通文本,无解析逻辑 - 即使装了
SublimeLinter-contrib-coffeescript,也只用于 lint,不参与配置加载 - 试图用
import coffee或require('coffee-script')在插件里解析 CSON,会因缺少 Node.js 环境而失败
想在 Sublime 中复用 Atom 的 CSON 配置?先转成 JSON
真正可行的路径只有一条:把 CSON 转成 Sublime 能读的格式。核心工具是 coffee CLI 或 Node.js 的 cson 包,不是 Sublime 自身功能。
例如将 Atom 的 snippets.cson 转为 Sublime 的 snippets.json:
npm install -g cson cson -j snippets.cson > snippets.json
但注意:cson 包输出的是纯 JSON,Sublime 的 snippet 格式仍需手动适配:
- Atom 的
'source.js': { 'log': { 'prefix': 'log', 'body': 'console.log($1);' } } - Sublime 要求每个
.sublime-snippet是独立 XML 文件,或合并为Preferences.sublime-settings中的"auto_complete_triggers"结构 - 没有现成的 1:1 映射规则;
scope字段要转成 Sublime 的source.js,但prefix和body得重写为 XML 的<tabtrigger></tabtrigger>和<content></content>
真正高效的做法:绕过 CSON,直出 Sublime 原生格式
如果你控制着原始配置源(比如自己写的片段),别先写 CSON 再转——直接生成 Sublime 可用的格式更稳、更快。
- 写一个脚本,输入是 YAML 或 JSON 描述(如
{ "trigger": "log", "scope": "source.js", "body": "console.log($1);" }),输出是标准.sublime-snippetXML 文件 - 避免依赖 CoffeeScript 解析器,省去
cson→JSON→XML两步转换和格式失真风险 - Sublime 的
scope比 Atom 更敏感:写错一个字母(如source.javascript而非source.js)就完全不触发 - 如果必须批量处理,用
xml2js+fs写 Node 脚本比靠编辑器插件更可控
最常被忽略的一点:CSON 里的注释(# 开头)在转成 JSON 后会丢失,而 Sublime 的 .sublime-snippet 支持 XML 注释,但 .sublime-settings 不支持任何注释——这点在维护团队共享配置时极易引发歧义。











