snippets.cson 必须放在指定路径且 scope 完全匹配才生效:macos/linux 为 ~/.atom/snippets.cson,windows 为 %userprofile%\.atom\snippets.cson;scope 需用 grammar scope(如 '.source.js'),可通过 editor: log cursor scope 查看;修改后需执行 snippets: reload snippets。

snippets.cson 文件路径写错就完全不生效
Atom 只读取唯一路径下的 snippets.cson,其他位置写的全无效。 macOS/Linux 必须放 ~/.atom/snippets.cson(注意 .atom 是隐藏目录,开头的点不能漏);Windows 必须是 %USERPROFILE%\.atom\snippets.cson(反斜杠要转义,实际输入用 \ 或统一用正斜杠 /)。
常见失效原因:
- 把文件建在项目根目录、~/.atom/init.coffee 或 ~/.atom/config.cson 里
- 后缀写成 snippets.json、snippets.cson.bak 或拼错为 snippet.cson
- 路径里漏了 .,比如写成 atom/snippets.cson
scope 写不对,输入 prefix 也毫无反应
scope 不是语言名,而是 Atom 当前文件的真实 grammar scope,必须完全匹配。例如:
- JavaScript 文件用 '.source.js',不是 'javascript' 或 '.js'
- Vue 单文件组件的 template 区域用 '.text.html.vue',不是 '.vue'
- JSX 文件用 '.source.js.jsx',TSX 是 '.source.tsx'
查当前 scope 最准的方法:按 Cmd+Shift+P(macOS)或 Ctrl+Shift+P(Win/Linux),输入并执行 Editor: Log Cursor Scope,看控制台输出,比如 source.js.jsx meta.function.js → 就该写 '.source.js.jsx'
多个 scope 要写成数组:scope: ['source.js', 'source.ts'],不能写成字符串拼接
body 中占位符和多行写法容易导致整个 snippet 失效
body 必须严格按 CSON 规则写:
- 多行内容必须用三重单引号 ''' 包裹,避免手动写 \n 和缩进混乱
- tabStop 编号必须从 开始连续递增,、、<p><code>body 必须严格按 CSON 规则写:
- 多行内容必须用三重单引号 ''' 包裹,避免手动写 \n 和缩进混乱
- tabStop 编号必须从 $1 开始连续递增,$1、$2、$0 可以,但 $1、$3 或两个 $1 都会失效
- 不支持 VS Code 风格的 ${1:"default"},CSON 解析直接跳过整条 snippet
- $0 表示最终光标位置,只出现一次,且不应放在第一个跳转点(否则一触发就退出编辑态)
示例(合法):
、 或两个 都会失效- 不支持 VS Code 风格的
${1:"default"},CSON 解析直接跳过整条 snippet-
<p><code>body 必须严格按 CSON 规则写:- 多行内容必须用三重单引号
''' 包裹,避免手动写 \n 和缩进混乱- tabStop 编号必须从
$1 开始连续递增,$1、$2、$0 可以,但 $1、$3 或两个 $1 都会失效- 不支持 VS Code 风格的
${1:"default"},CSON 解析直接跳过整条 snippet-
$0 表示最终光标位置,只出现一次,且不应放在第一个跳转点(否则一触发就退出编辑态)示例(合法):
表示最终光标位置,只出现一次,且不应放在第一个跳转点(否则一触发就退出编辑态)
示例(合法):
'.source.js':<br> 'logt':<br> 'prefix': 'logt'<br> 'body': 'console.log(`[${new Date().toISOString()}] $1`, $2);'
改完 snippets.cson 后没反应?别重启,先重载
Atom 不热重载 snippets.cson,但不需要完全重启:
- 按 Cmd+Shift+P / Ctrl+Shift+P → 输入 Snippets: Reload Snippets 回车
- 或用快捷键:Cmd+Alt+Ctrl+L(macOS)、Ctrl+Shift+F5(Win/Linux)
如果仍不生效,立刻检查:
- 文件是否已保存(未保存时 CSON 解析失败,Atom 静默跳过)
- CSON 末尾有没有多余逗号(CSON 语法不允许)
- 是否在正确语言模式下测试(右下角语言标识必须是 HTML/JS/CSS,不是 Plain Text)
- 光标是否在行首或空行(前面有字符时 snippet 不触发)
真正卡住人的地方往往不是语法写错,而是 scope 和路径这两个环节——一个看不见,一个藏得深。查 scope 要靠命令,放路径要抠细节,少一个字符都白忙。











