必须先全局禁用 Ctrl+S 默认行为,再按语言 scope 精准绑定 prettier:format;否则 core:save 与 prettier:format 冲突。常见失效原因:keymap.cson 语法错误、误改其他配置文件、scope 名不匹配。

Atom 里改格式化快捷键,不能只加一条新绑定,否则 core:save 和 prettier:format 会同时触发——保存没完成就格式化,或格式化完又被覆盖。必须先解除默认行为,再按语言 scope 精准重绑。
为什么 Ctrl+S 改不了?静默失效的三个常见原因
改了 keymap.cson 没反应,大概率不是 Atom 坏了,而是:
-
keymap.cson语法出错:CSON 对缩进、逗号、引号极其敏感,多一个空格或少一个单引号就静默失败,右下角只会闪个红点 - 误改了
config.cson或init.coffee:这两个文件里写快捷键完全无效 - scope 名写错:比如当前文件实际是
.source.jsx,你却绑在.source.js上,压根不匹配
查真实 scope 的方法:按 Cmd+Shift+P(macOS)或 Ctrl+Shift+P(Win/Linux),输入 Developer: Toggle Dev Tools,控制台执行:atom.workspace.getActiveTextEditor().getGrammar().scopeName
怎么让 Ctrl+S 只在 JS/TS/CSS 里格式化,其他文件照常保存
核心逻辑是「先禁用全局默认,再按 scope 重定向」。不能只加新绑定,否则两个命令抢着执行。
- 第一步:全局禁用原绑定,在
keymap.cson顶部加:'*': 'ctrl-s': 'unset!' - 第二步:按真实 scope 绑定格式化命令,例如:
'.source.js': 'ctrl-s': 'prettier:format''.source.ts': 'ctrl-s': 'prettier:format''.source.css': 'ctrl-s': 'prettier:format' - 第三步:确保插件已安装且启用(如
prettier-atom),且其命令名确实是prettier:format;不确定时去Settings > Keybindings搜prettier确认
快捷键三要素写全了没?选择器、按键、命令缺一不可
一个有效绑定必须同时说清三件事,漏掉任何一项都会导致不生效或乱触发:
- 选择器(selector):比如
'atom-text-editor'表示所有编辑器区域,'.source.js'表示 JS 文件,'*'是全局(慎用) - 按键(keystroke):统一用小写短横线格式,如
'ctrl-s'、'cmd-shift-k',别写成Ctrl+S或CTRL-S - 命令(command):必须完整准确,比如
'editor:delete-line',少冒号、拼错单词(如delete-linee)、多空格都会静默失败
多个同名选择器块会覆盖:后写的 'atom-text-editor' 块会把前面整个顶掉,所有编辑器相关绑定建议集中写在一个块里。
最易被忽略的是 scope 匹配和 CSON 缩进——改完保存后,务必按 Cmd+Alt+R(macOS)或 Ctrl+Alt+R(Win/Linux)重载窗口,别靠重启,也别信图形界面 Settings > Keybindings 的编辑框能新增绑定。

















