VSCode没有独立的“只读文件预览模式”,所谓只读预览是预览标签(斜体)的默认行为:不绑定文件句柄、不保存、关闭即丢内容;其本质是延迟同步与无编辑能力,非权限控制。

VSCode 里没有“只读文件预览模式”这个独立功能
所谓“只读预览”,其实是 VSCode 默认行为的副产品:当你单击资源管理器里的文件(尤其是 .md、.html、图片等),它会以预览标签(斜体)打开——这个标签天然只读,不绑定保存状态,关掉就丢内容。但这不是专为“只读”设计的模式,而是预览机制本身的限制。
想让特定文件类型默认只读预览,靠 workbench.editorAssociations
比如你希望所有 .md 文件双击就进 Markdown 预览(只读、自动刷新),而不是文本编辑器,就得在 settings.json 里加:
"workbench.editorAssociations": {
"*.md": "vscode.markdown.preview.editor"
}
注意三点:
-
vscode.markdown.preview.editor是内置预览编辑器的固定viewType,不能拼错 - 该设置生效后,双击
.md文件直接进预览,但 Ctrl+Click 跳转定义仍走文本编辑器(除非额外关workbench.editor.enablePreviewFromCodeNavigation) - 如果同时配置了
"workbench.editor.enablePreview": false,这条关联可能被压制——预览模式全局关闭时,VSCode 会忽略按类型指定的预览意图
为什么预览看起来“只读”?其实是因为没绑定编辑器实例
预览标签不对应真实文件句柄,它只是基于当前磁盘内容生成的一次性渲染。你改了源码但没保存,预览不会变;点了右上角刷新按钮(↻),也只是重载 HTML,不读取编辑器缓冲区。这种“只读感”本质是延迟同步 + 无编辑能力,不是权限控制。
常见误操作:
- 以为开启
markdown.preview.enabled就能获得只读保护——它只是开关预览功能,不影响编辑器是否可写 - 试图用
files.readonlyInclude或files.exclude强制只读——这些只影响文件系统层面或资源管理器显示,不改变编辑器行为 - 在预览窗口里右键找“Save As”——根本不存在,预览就是无保存入口的视图
真正需要只读保护?得换思路
如果你真要防止误编辑某类文件(比如生产环境配置模板、README 快照),VSCode 没有原生只读编辑器,但可以组合实现:
- 用
files.associations把文件后缀映射到只读语言模式(如设"*.template": "plaintext"),再配合扩展如Readonly Mode手动切换 - 把文件设为系统只读(chmod 444 / chflags uchg),VSCode 会提示“文件为只读”,但允许强制保存(需确认)
- 用工作区设置
"files.autoSave": "off"+ 禁用保存快捷键(通过keybindings.json移除files.save绑定),属于硬性拦截
别指望预览模式本身提供安全边界——它连编辑器都算不上,只是个快照渲染器。


















