snippets.cson 文件必须放在 ~/.atom/snippets.cson(macos/linux)或 %userprofile%.atom\snippets.cson(windows),路径错一个字符、文件名拼错或放错位置均导致失效。

Atom 的代码片段不会自动生效,必须手动创建 snippets.cson 文件、写对 scope、保存后执行重载命令——漏掉任一环节,输入 prefix + Tab 就完全没反应。
snippets.cson 文件必须放在哪?路径错一个字符就失效
Atom 只读取唯一路径下的 snippets.cson,其他位置写的全被忽略:
- macOS/Linux:
~/.atom/snippets.cson(注意.atom是隐藏目录,开头的点不能丢) - Windows:
%USERPROFILE%\.atom\snippets.cson(反斜杠需转义,实际路径中可用\或统一改用/)
常见错误包括:
- 把文件建在项目根目录、
~/.atom/init.coffee或插件目录下 - 文件名拼错:比如
snippet.cson(少 s)、snippets.json(后缀错) - 路径漏掉点号,写成
atom/snippets.cson或C:\Users\Name\atom\snippets.cson
scope 怎么写才匹配当前文件类型?靠猜等于白写
scope 不是语言名,而是 Atom 实际识别的 grammar scope,必须完全一致。写成 javascript、.js、source.js(缺点号)都无效。
正确写法示例:
- 普通 JavaScript:
'.source.js' - React JSX:
'.source.js.jsx' - TypeScript:
'.source.ts' - HTML:
'.text.html.basic' - CSS:
'.source.css'
查当前真实 scope 的唯一可靠方式:
- 在目标文件中按
Cmd+Shift+P(macOS)或Ctrl+Shift+P(Win/Linux) - 输入
Editor: Log Cursor Scope并回车 - 看控制台输出,例如
source.js.jsx meta.function.js→ 就用'.source.js.jsx'
多个 scope 要用数组写法:['.source.js', '.source.ts'],不能写成字符串拼接或加竖线。
prefix 和 body 怎么写才不崩?占位符编号断档就全失效
prefix 是你敲完按 Tab 触发的词,只支持英文小写和短横线,比如 cl、react-comp;中文、空格、大写字母会直接失效。
body 是展开内容,注意这些硬性规则:
- 多行内容必须用三重单引号
'''包裹,避免手动写\n和缩进错乱 - 占位符必须从
$1开始连续编号:$1→$2→$0,跳号(如只有$1和$3)或重复(两个$1)会导致后续全部失效 -
$0是终点占位符,只能出现一次,别把它放第一个位置 - 不支持 VS Code 风格的
${1:default},写了整个 snippet 会静默跳过(CSON 解析失败) -
body行首缩进必须和body:对齐,顶格写会解析失败
示例(JS 中输入 cl 展开为 console.log($1);):
'.source.js':
'cl':
'prefix': 'cl'
'body': 'console.log($1);'
改完不生效?重载比重启更快,但 scope 错了重载也没用
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 不允许)
- 同
scope下是否已有同名prefix被覆盖 - 右下角语言标识是不是对应语法(比如显示
Plain Text就不会触发任何 snippet)
最常被忽略的是:scope 必须和 Editor: Log Cursor Scope 输出的最前段完全一致,差一个点、一个字母、一个空格,就等于没写。











