vscode默认不自动保存,必须手动ctrl+s;开启需设files.autosave为afterdelay/onfocuschange/onwindowchange之一,且files.autosavedelay仅在afterdelay模式下生效,推荐本地设800~1200ms、远程设1500~2500ms。

VSCode 默认完全不自动保存,改完代码必须手动 Ctrl+S,否则关窗口、切分支、提交 Git 都可能丢内容。所谓“没开启”,大概率是根本没配,而不是配错了。
为什么改了 files.autoSaveDelay 却没反应
这个值本身不生效,它只是个“配角”——必须和 files.autoSave 联动才起作用:
-
files.autoSave必须设为字符串"afterDelay"(不是true、1或"true") -
files.autoSaveDelay必须是整数(如1000),写成"1000"或1000.0会被忽略 - 工作区设置(
.vscode/settings.json)优先级更高,里面若写了"files.autoSave": "off",全局怎么调都白搭 - 编辑的是
Untitled-1这类未命名临时文件,或只读文件、远程路径权限不足时,保存动作直接跳过
files.autoSave 的四个合法值怎么选
它不是开关,而是四种行为模式,选错就等于没开:
-
"off":彻底关闭,等同于默认行为 -
"afterDelay":停手后倒计时,继续敲字就重置;适合单文件专注编辑,但 Git 冲突中易存半截 -
"onFocusChange":当前编辑器标签页一失焦(比如点终端、切到资源管理器)就立刻保存;响应快,适合多文件切换频繁的场景 -
"onWindowChange":整个 VSCode 窗口失去系统焦点(如Alt+Tab切到浏览器)才保存;但系统弹窗、微信浮窗也会触发,不稳定,慎用
延迟时间设多少才靠谱
files.autoSaveDelay 不是定时器周期,是防抖阈值,实际精度还受四舍五入影响(1200 ≈ 1000,1600 ≈ 2000):
- 本地开发:推荐
800~1200,1000是平衡点;低于800可能被截断为0,退化成失焦即存 - 远程开发(SSH/WSL):必须拉高到
1500~2500,否则常报Failed to save 'xxx': Unable to write file - 大文件或正在解 Git 冲突:建议 ≥
2000,避免把中间状态写进磁盘 - 别填小数或带单位字符串(如
"300ms"),VSCode 直接无视
只对特定语言启用自动保存
全局开 "afterDelay" 容易误伤,比如保存 webpack.config.js 触发构建,或 Markdown 频繁预览卡顿:
- 打开命令面板(
Ctrl+Shift+P),运行Preferences: Configure Language Specific Settings - 选目标语言,注意 ID 准确:
[javascript]不是[js],[typescript]不是[ts] - 填入配置,例如:
{"files.autoSave":"onFocusChange"}该配置只作用于对应后缀文件(如.js、.ts) - 如果同时开了
editor.formatOnSave,格式化失败会导致保存静默取消,调files.autoSaveDelay解决不了这个问题
最常被忽略的一点:files.autoSaveDelay 的“延迟”不是从你开始编辑算起,而是从你**最后一次按键结束**开始倒计时;狂敲 5 秒不松手,它根本不会动;可一旦停顿超过设定值,它立刻落盘——这时候你正盯着 Git 冲突发呆,光标还在 里,就危险了。











