atom代码片段必须全部写入~/.atom/snippets.cson文件,使用纯cson语法,正确配置scope(如source.js)、prefix(推荐英文小写)、占位符($1、${1:default})并手动重载才能生效。

Snippet 文件必须放在 snippets.cson 里,不是随便建个 .cson 就行
Atom 的代码片段不支持分散的文件或目录式管理,所有自定义 snippet 都得写进用户主目录下的 ~/.atom/snippets.cson(Windows 是 %USERPROFILE%\.atom\snippets.cson)。很多人新建个 my-snippet.cson 放在项目里,结果完全不生效——Atom 根本不读它。
常见错误现象:tab 键没触发、自动补全列表里找不到你的 snippet、改完文件重启 Atom 也没用。
- 确认路径是
~/.atom/snippets.cson,不是~/.atom/init.coffee或~/.atom/keymap.cson - 文件必须是纯 CSON(CoffeeScript Object Notation),不是 JSON,末尾不能有逗号,字符串不用引号也能写(但带空格或特殊字符时得加单引号)
- 改完记得保存,Atom 不会热重载 snippets,需要手动执行
Application: Reload(Cmd+Alt+Ctrl+L/Ctrl+Shift+F5)
scope 写错就等于白写:不同语言要用不同 scope 值
snippet 能否触发,完全取决于当前编辑器的 grammar scope。比如你在写 JavaScript 文件,但 snippet 的 scope 写成 'source.python',那它永远不出现。
使用场景:想让 log 片段只在 JS 中生效,或在 JSX 和 TSX 中都生效,就得配对的 scope。
- 查当前 scope:按
Cmd+Shift+P(Mac)或Ctrl+Shift+P(Win/Linux),搜Editor: Log Cursor Scope,光标所在位置会输出类似source.js.jsx或source.tsx - 常用 scope:
source.js(JS)、source.js.jsx(React)、source.ts(TS)、text.html.basic(HTML)、source.css(CSS) - 多个 scope 可用数组写:
scope: ['source.js', 'source.ts'],但不能写成source.js, source.ts
变量和占位符用 $1、$2、${1:default},别手滑写成 $0 开头
Atom snippet 的光标跳转靠数字序号,$1 是第一个停靠点,$2 是第二个……$0 是最终退出位置(常用于结尾)。如果把 $1 误写成 $0,会导致 tab 停不下来或直接跳出编辑态。
参数差异:带默认值的写法是 ${1:console.log},不是 $1{console.log} 或 $1="console.log";嵌套变量如 ${2:$1} 表示第二个位置默认填第一个位置的内容。
- 别用
$0当首个焦点——它没有“前一个”,一触发就结束编辑 - 重复内容用
${1:xxx}+${1}实现联动,比如函数名定义和调用同步改 - 换行必须用
\n,不能直接回车(CSON 不认裸换行)
中文或特殊字符当 prefix 容易失效,优先用英文小写+短横线
虽然 Atom 允许 prefix: '打印',但实际中输入中文后常卡住、不弹候选、或者要连按两次 Tab 才触发。根本原因是输入法切换和 keybinding 冲突,以及 Atom 对非 ASCII prefix 的匹配逻辑较弱。
性能影响:含 Unicode 的 prefix 会略微拖慢 snippet 匹配速度,尤其在插件多、grammar 复杂的文件里更明显。
- 推荐命名:
log、fori、fetch-get,而不是日志、循环、请求get - 如果真要支持中文,得确保输入法处于英文状态再输 prefix,否则大概率失败
- 避免用
.、/、?等符号开头,它们可能被当成 grammar 或路径解析










