VSCode没有“离手检测”功能,其“离手后自动保存”实为files.autoSave设为afterDelay模式并配置files.autoSaveDelay:推荐值1000~1500ms,需手动设置且仅对该模式生效;WSL/远程环境建议调至1800~2000ms。

VSCode 没有“离手检测”功能,所谓“离手后自动保存”,实际是指编辑器在你停止输入(即键盘/鼠标无操作)一段时间后触发保存——这对应的是 files.autoSave 设为 afterDelay 模式,并配好 files.autoSaveDelay。
选 afterDelay 而不是 onFocusChange
很多人误以为切到终端或另一个标签页才叫“离手”,但真正符合“停笔即存”直觉的,是 afterDelay:它只看当前文件有没有持续修改,不依赖焦点切换。比如你写完一行、发个呆、喝口水,1 秒后就自动落盘。
-
onFocusChange是“换文件就存”,适合怕丢内容但写得断续的人;但它无法响应“写完停顿”这个动作 -
afterDelay才是严格意义上的“离手延迟保存”,但必须显式设files.autoSaveDelay,否则默认值可能不生效(尤其旧版 VS Code) - 设太小(如
100)会导致每敲几个字符就刷一次磁盘,机械硬盘或 WSL 下能感觉到卡顿 - 推荐值:
1000~1500(单位毫秒),兼顾响应与 IO 压力
files.autoSaveDelay 必须手动配,不能只选模式
在设置里选了 afterDelay,不代表自动保存就启动了。VS Code 会检查 files.autoSaveDelay 是否存在且为正整数;如果没配,部分版本会退回到 off 行为,表面开着实际不存。
- 打开设置(
Ctrl + ,或Cmd + ,),搜files.autoSaveDelay - 点右侧铅笔图标,输入数字,比如
1200 - 或者直接改
settings.json,加这一行:"files.autoSaveDelay": 1200
- 注意:该值只对
afterDelay模式生效,其他模式下设了也忽略
为什么改了没反应?优先查这三个地方
配置写了、延迟设了、重启也做了,还是不保存?大概率是被更高优先级的规则覆盖了。
- 工作区设置(
.vscode/settings.json)存在且含"files.autoSave": "off"→ 它会压倒用户级设置 - 语言专属配置悄悄关掉了:比如你为
Plain Text设过"files.autoSave": "off",那所有未关联语法的 .txt/.log 文件都不会自动存 - 格式化插件(如 Prettier)失败时,VS Code 可能静默放弃整个保存流程——临时禁用
editor.formatOnSave测试是否恢复
远程开发(WSL / SSH)要调高延迟值
在 WSL 或远程容器里,afterDelay 的实际触发时间往往比设定值多出 200~500ms,尤其路径挂在 /mnt/c/ 下时。这不是 bug,是 IO 和事件循环延迟叠加的结果。
- 建议把
files.autoSaveDelay提到1800~2000,避免频繁小改动反复触发 - 更彻底的解法:把项目移到 WSL 原生路径(如
~/project),延迟会回归稳定 - 别用
onWindowChange:系统通知、微信浮窗、甚至 Windows 资源管理器弹窗都会让它误触发,完全不符合“离手”本意
真正的“离手保存”只靠 afterDelay + 合理 files.autoSaveDelay 实现,其他模式都是行为偏移。最容易被忽略的是语言专属配置和远程 IO 延迟——它们不会报错,只会让你反复怀疑配置是不是没生效。











