snippets.cson 必须手动编辑、严格遵循 CSON 语法、保存后自动重载,不支持 JSON 或分散文件;路径固定为 ~/.atom/snippets.cson(Windows 为 %USERPROFILE%\.atom\snippets.cson),结构以 scope 选择器开头,占位符用 $1/$2/$0 控制跳转,三引号包裹多行 body,常见失效原因包括文件名错误、CSON 语法错误(如末尾逗号)、scope 名不匹配或覆盖冲突。

Atom 的 snippets.cson 文件必须手动编辑、严格遵循 CSON 语法、保存后自动重载,不支持 JSON 格式或分散文件管理。
snippets.cson 文件位置和基础结构
所有自定义代码片段必须写入 ~/.atom/snippets.cson(Windows 是 %USERPROFILE%\.atom\snippets.cson),不能放在其他路径,也不能拆成多个文件。这个文件是纯 CSON(CoffeeScript Object Notation),不是 JSON —— 所以末尾不能有逗号,字符串通常不用引号(但含空格或特殊字符时得加单引号)。
基本结构长这样:
'.source.js':
'console.log':
'prefix': 'log'
'body': 'console.log(${1:"crash"});$2'
-
.source.js是 scope 选择器,表示只在 JavaScript 文件中生效;查 scope 最可靠的方式是打开对应语言包(如language-javascript)里的grammars/javascript.cson,找scopeName字段 - 多个 scope 可用数组:
scope: ['source.js', 'source.ts'],别写成source.js, source.ts - 键名必须带点(
.),比如.text.html.php,不是text.html.php
占位符 $1、$2 和 $0 的实际行为
Tab 跳转逻辑由 $1、$2 等数字控制,$0 表示最终光标退出位置。写错会直接跳出编辑态或卡住。
-
$1是第一个可编辑位置,${1:"default"}表示默认填充default并选中它 - 相同数字(如两个
$2)会创建多光标,适合重复字段(比如对象 key/value 对) - 别手滑写
$0开头的占位符(如$01),Atom 会当作无效 token 忽略,导致 tab 停不下来 - 多行 body 推荐用三引号
"""包裹,避免手动写\n和缩进混乱
常见失效原因和验证方法
写完保存却没反应?大概率是这几种情况之一:
- 文件名错:确认是
snippets.cson,不是init.coffee或keymap.cson - 语法错:CSON 不允许末尾逗号、不允许未闭合引号、不支持注释符号
//(可用#) - scope 错:比如想在 HTML 中用,却写了
.source.html(正确是.text.html) - 覆盖冲突:同 scope 下同名 snippet 会被后定义的覆盖,命名建议带项目前缀(如
my-log) - 验证方式:打开对应类型文件 → 输入 prefix → 按 Tab;若无反应,打开 Atom 开发者工具(
View → Developer → Toggle Developer Tools)看 Console 是否报 CSON 解析错误
真正麻烦的不是写法,而是 scope 名称的隐蔽性——它不等于文件后缀,也不等于语言包名,得去 grammar 文件里翻 scopeName。改一次 scope 就得重启 Atom 或等几秒自动重载,但语法错会导致整个 snippets.cson 失效,连带其他已配置的 snippet 都不工作。

















