vs code 无法真正“永不改动”文件,需结合系统只读属性与 files.readonlyinclude 配置实现强只读:设 chmod 444(macos/linux)或文件属性“只读”(windows),再配置 glob 模式匹配路径,重启文件生效,保存时明确报错。

VS Code 怎么让文件“只读”不被意外修改
VS Code 本身没有“永不改动”的文件锁机制,所谓“永不改动”,实际是通过系统级只读属性 + 编辑器行为控制来实现的——核心目标是:打开时自动进入只读模式、保存时明确报错、且不依赖用户手动切换状态。
chmod +r 或文件属性设为只读后,VS Code 还能编辑?
能,但会触发明确提示。VS Code 检测到文件无写权限(Linux/macOS)或 Windows 属性含“只读”时,会在编辑器右下角显示 Readonly 标签,并禁用保存快捷键(Ctrl+S / Cmd+S)。此时若强行点击保存按钮,会弹出错误:Unable to write file 'xxx' (NoPermissions)。
- Windows 用户:右键文件 → “属性” → 勾选“只读” → 确定
- macOS/Linux:终端执行
chmod 444 /path/to/file(仅读,不含执行) - 注意:
chmod 444对目录无效;若文件在 Git 仓库中,Git 可能自动重置权限,需配合git config core.filemode false
想全局禁止某类文件被保存,该配 files.readonly 还是 files.exclude?
两个都错。files.exclude 是隐藏文件,不影响可编辑性;files.readonly 是旧版配置项,VS Code 1.80+ 已弃用。真正起效的是 files.readonlyInclude,它接受 glob 模式,匹配后强制只读:
"files.readonlyInclude": {
"**/config.production.json": true,
"**/*.lock": true
}- 匹配路径基于工作区根目录,不是绝对路径
- 修改后需重启 VS Code 或重新打开文件才生效
- 该设置不会阻止你“输入”,只拦截保存动作——这点容易误判为“没生效”
为什么加了 readonlyInclude 还能保存成功?
常见原因有三个:路径 glob 写错、文件已打开再改配置、或插件绕过限制。比如:
- 写成
"**/prod.json"却实际文件叫prod.config.json→ 不匹配 - 文件已在编辑器中打开,配置变更后未关闭重开 → VS Code 不动态重载只读状态
- 安装了
Auto Save类插件,或用了Remote - SSH且远程用户有写权限 → 权限判断发生在远程端,本地配置无效
最稳的做法:设好 readonlyInclude → 关闭所有相关文件 → 重新打开 → 尝试 Ctrl+S,确认弹出 Cannot save… File is read-only 提示。
真正的“永不改动”不存在,但靠系统权限 + VS Code 的只读策略 + 严格 glob 配置,可以做到绝大多数场景下无法误存。关键不在设置多复杂,而在每次改完配置后——关掉再开一次文件。










