atom的autosave默认是“失焦保存”而非实时保存,即仅在编辑器失去焦点时(如切换tab、alt+tab切出)才写入磁盘,未命名、只读或ftp文件不生效,关闭前强制保存一次。

autosave 默认不是“改完就存”,而是“切走才存”
Atom 的 core.autosave 开关打开后,不会在你敲字或删字符时立刻写入磁盘。它只在编辑器「失去焦点」时触发保存:比如你点击另一个 tab、Alt+Tab 切到浏览器、点菜单栏、甚至用鼠标点一下状态栏——这时才会真正落盘。文件标题仍带 * 号?说明还没保存,不是插件坏了,是没满足触发条件。
-
core.autosave: true必须写在用户级~/.atom/config.cson里,项目根目录下的.atom/config.cson不生效 - 只读文件、FTP 挂载路径、未命名(untitled)文件,
autosave直接跳过,不报错也不提示 - 关闭窗口前会强制保存一次,这是唯一兜底机制,别依赖它来救急
- 想“每改一个字符就存”?原生不支持,得装
atom-autosave-onchange,但风险明确:JSON 写到一半缺个}就被刷进磁盘,后续编译/运行直接失败
保存即编译:build-on-save + atom-build-sass / language-babel 组合才可靠
Atom 本身不监听「保存事件」去跑构建任务,必须靠插件桥接。常见错误是只装了 atom-build-sass 却没装 build-on-save,结果按 Ctrl+S 文件存了,CSS 就是不生成。
-
build-on-save是触发器,atom-build-sass或language-babel是执行器,两者缺一不可 -
sass-autocompile自带 watch 模式,但容易卡住(尤其大项目),且配置项多,atom-build-sass + build-on-save更轻量可控 - 对于 JSX/TS 编译,
language-babel需要右下角语言模式设为Babel ES6 JavaScript,否则transpileOnSave: true完全不响应 - 项目级配置如
.languagebabel或.atom-build.yml必须放在项目根目录,且文件名严格区分大小写和点号(.atom-build.yml不是atom-build.yml)
Windows 和 Linux 下 {FILE_ACTIVE} 路径变量写法不同
.atom-build.yml 里用变量拼命令行时,路径分隔符和引号处理是跨平台坑点。Windows 下不加引号、用反斜杠,Linux 下必须加双引号、用正斜杠,写反了直接报 command not found 或 No such file。
- Windows 示例:
cmd: "npx sass {FILE_ACTIVE}:./dist/{FILE_ACTIVE_NAME_BASE}.css" - Linux/macOS 示例:
cmd: "npx sass \"{FILE_ACTIVE}\":./dist/{FILE_ACTIVE_NAME_BASE}.css" -
{FILE_ACTIVE_PATH}在 Windows 下含盘符(如C:\project\src),Linux 下是相对路径(如/home/user/project/src),硬编码路径前务必确认当前系统 - 如果命令里含空格(如
C:\Program Files\nodejs\npx.cmd),Windows 必须用双引号包裹整个cmd字段
多个保存逻辑共存时,重复保存或冲突几乎必然发生
同时开启 core.autosave、build-on-save、sass-autocompile 三者,可能在一次切窗动作后触发两次保存、两次编译——轻则终端刷屏,重则 CSS 被覆盖一半、source map 错位。
- 建议只保留一种保存驱动:用
core.autosave管文件落盘,用build-on-save管编译,二者解耦 -
atom-autosave-onchange和core.autosave绝对不能共存,前者会高频调用 fs.write,后者在失焦时再写一次,极大概率损坏文件 - 插件配置缩进必须是两个空格(CSON 语法),用 Tab 或四个空格会导致 Atom 启动失败且不报具体错误
- 改完
config.cson或插件设置后,不用重启 Atom,但需确保 Atom 是从用户目录启动的(而非某项目子目录),否则加载的是项目级配置










