VSCode显示“未保存”绝大多数是文件未写入磁盘所致:自动保存未开启(默认off)、配置错误(如afterDelay未设延迟值)或系统权限不足(如settings.json被设为只读、WSL挂载无metadata支持),均会导致标签页持续显示●或★。

VSCode 显示文件“未保存”,绝大多数情况不是它“卡住了”,而是文件压根没被写入磁盘——要么你根本没点保存,要么编辑器被权限、只读标记或外部锁定拦住了。自动保存没开、开了但配置错、或文件系统不认你有写权限,都会导致标签页上一直挂着 ● 或 ★。
files.autoSave 没开或开错模式,改了等于白改
VSCode 默认 files.autoSave 是 off,也就是说:你敲完代码、删掉半页、重写逻辑,只要没按 Ctrl+S,文件就始终是“已修改未保存”状态。这不是 bug,是设计。
-
"files.autoSave": "afterDelay"最实用:停顿 1 秒后自动存,适合大多数场景;记得同步设"files.autoSaveDelay": 1000 -
"files.autoSave": "onFocusChange"容易误触发:切到终端、点一下侧边栏、甚至鼠标移出编辑区都可能保存,对调试或快速草稿不友好 -
"files.autoSave": "onWindowChange"更激进:只要 VSCode 窗口失焦(比如切到浏览器),所有修改文件立刻落盘——别在写敏感配置时用这个 - 如果用了
afterDelay却仍提示未保存,检查是否刚打完字就蓝屏/崩溃:延迟还没到,内容还卡在内存里
settings.json 保存失败?90% 是文件系统权限问题
你改完 settings.json 按 Ctrl+S 没反应,或者弹 EACCES: permission denied,基本可以确定不是 VSCode 的锅,而是操作系统拒绝写入。
- Windows:右键
%APPDATA%\Code\User\settings.json→ 属性 → 取消勾选“只读” → 应用 - Linux/macOS:运行
chmod u+w ~/.config/Code/User/settings.json;如果ls -l显示属主是root,补一句sudo chown -R $USER:$GROUPS ~/.config/Code/User/ - WSL 下别用 Windows 资源管理器打开
\wsl$\Ubuntu\home\...\settings.json—— DrivFS 不认chmod,必须用 Remote-WSL 扩展打开 -
files.readonly配置项对settings.json完全无效,别往那上面浪费时间
标签页显示 ● 却没编辑?可能是外部程序锁住了文件
你只是打开一个 .js 文件看两眼,标签页却带圆点,说明 VSCode 检测到磁盘内容和编辑器缓存不一致。常见于:
- 文件正被其他程序占用(如 Webpack watch、Git GUI、文本编辑器双开)
- 远程开发(SSH/WSL)时,远端文件被另一台机器修改,但 VSCode 没及时监听到变更
- 编码异常:右下角状态栏显示
Unknown Encoding,VSCode 无法比对内容,干脆跳过自动保存逻辑 - Git 忽略的文件(比如
node_modules/**里的文件)即使打开并修改,files.autoSave也不会管它
批量保存所有未保存文件,但别依赖快捷键肌肉记忆
Ctrl+K S(Windows/Linux)或 Cmd+K S(macOS)是两步操作:先按 Ctrl+K 松开,再按 S。它触发的是 workbench.action.files.saveAll,会强制把所有已打开且有改动的标签页写入磁盘。
- 这个命令不管文件是否已命名(
Untitled-1也能另存为) - 但它不会帮你解决权限问题——如果某个文件因
EACCES无法保存,它会静默跳过,不报错也不提醒 - 如果你开了多个工作区窗口,
saveAll只作用于当前激活窗口,不会跨窗保存 - 真要“无感保存”,唯一可靠路径是
files.autoSave: afterDelay+ 合理的files.autoSaveDelay,而不是靠快捷键补漏
最常被忽略的一点:VSCode 的“未保存”状态判断,完全依赖 fs.accessSync(path, fs.constants.W_OK) 返回值。它不看你有没有勾选“只读”,也不管 Git 有没有 track 这个文件——只要操作系统说“你不能写”,它就拒绝保存,连提示都可能没有。排查时,先看权限,再看设置,最后才怀疑插件或崩溃。











