VSCode没有“只读文件预览模式”功能,所谓预览是未保存文件的临时标签页行为,由workbench.editor.enablePreview控制,关闭该设置即可禁用预览、实现点开即常驻。

VSCode 没有“只读文件预览模式”这个功能,所谓“预览模式”其实是你没保存就点击了其他标签页,导致文件以临时只读状态打开——它和文件系统只读无关,也和 files.readonlyInclude 无关。
为什么点一下就变“只读预览”?
这是 VSCode 的默认编辑器行为:未保存的文件被称作“预览标签页”,右上角带一个箭头图标(▶),点击其他文件后自动释放,再次点击才转为常驻编辑状态。它不是权限问题,也不阻止编辑,只是 UI 上暂时不锁定该标签。
- 预览标签页里照样能敲代码、Ctrl+S 也能存(只要文件本身可写)
- 如果你点了它又切走,再回来时发现无法编辑,大概率是文件已被外部设为只读,或父目录不可写,不是预览惹的祸
-
workbench.editor.enablePreview控制的就是这个行为,设为false可彻底禁用预览
怎么关掉预览标签页机制?
在设置里关闭预览开关,所有文件点开即常驻,不再一闪而过:
- 快捷键
Ctrl+,打开设置,搜enablePreview - 把
Workbench › Editor › Enable Preview的勾去掉 - 或者直接在
settings.json里加:"workbench.editor.enablePreview": false - 改完不用重启,新打开的文件立即生效
别把“预览”和“只读”混为一谈
很多人看到预览标签页右下角没显示 Read Only,就以为它是“可写预览”,结果改完 Ctrl+S 失败——其实失败原因是文件系统权限,不是预览模式。真正决定能否保存的只有两件事:
- 文件自身是否可写(
fs.accessSync(path, fs.constants.W_OK)返回 true) - 父目录是否可写(VSCode 保存靠 rename,父目录无 w 权限也会失败)
预览模式既不改变权限,也不影响保存逻辑,它只是个标签页生命周期策略。最常被忽略的是:你在 WSL 或 OneDrive 里打开项目,挂载参数或同步状态可能让 ls -l 看着有 w,实际 write 调用仍被内核拒绝。











