VSCode无一键只读快捷键,真正只读需files.readonlyInclude配置(如"/node_modules/": true)与系统权限(chmod 444或Windows属性勾选只读)双重绑定,缺一则无法拦截保存。

VSCode 没有一键开启“只读模式”的快捷键。 所谓“只读”,本质是编辑器行为拦截 + 文件系统权限控制的组合效果,不是开关式功能。按 Ctrl+Shift+P 搜索 “Read Only” 也找不到对应命令——这是设计使然,不是你漏装插件。
为什么没有快捷键?
VSCode 的只读逻辑分两层:编辑器层(files.readonlyInclude)靠路径匹配静态生效;系统层(chmod 444 或 Windows 属性)靠 OS 权限实时拦截。两者都需预设、重启或重载才起效,无法动态切换。所谓“一键”,实际是误传——网上说的快捷键,要么是旧版已废弃的 files.readonly(1.79 及更早),要么是第三方插件伪造的 UI 行为(如 vscode-readonly-extension),但它们不拦 Save As、不防粘贴覆盖、也不影响外部进程写入。
files.readonlyInclude 配置怎么写才真正拦截保存?
这是目前最实用、跨平台、不影响 npm/yarn/pnpm 的方案,但它只拦 Ctrl+S,不拦编辑。生效前提有四个:
- 必须写进项目根目录下的
.vscode/settings.json,不能写在用户设置里(会被覆盖) - 路径用双星号递归匹配,例如:
"**/node_modules/**"、"**/package-lock.json"—— 写成"node_modules/**"会失效 - 改完后必须
Developer: Reload Window(Ctrl+Shift+P调出命令面板执行),否则已打开的文件不刷新状态 - 确认
files.saveWithoutWatching是false(默认为true,它会跳过只读检查直接写入)
怎样让文件“真的不能改”,连光标都不能点?
仅靠 VSCode 配置做不到。必须叠加操作系统级只读权限:
- macOS/Linux:终端执行
chmod 444 /path/to/file.ts(注意是444,不是644) - Windows:右键文件 → “属性” → 勾选“只读” → 点“应用”,并勾选“将更改应用于此文件夹、子文件夹和文件”
- 验证是否真生效:关闭该文件标签页 → 重新打开 → 按
Ctrl+S,必须弹出Unable to write file 'xxx' (NoPermissions)
此时 VSCode 会进入“强只读”状态:光标不可定位、Ctrl+A 后 Del 无效、右下角锁图标变实心。但注意:chmod -R 444 node_modules 会破坏包管理器,切勿对整个目录递归执行。
常见误判信号:右下角显示 “Read-only” 却能 Ctrl+S 成功
这是最危险的假象。VSCode 显示该提示只说明满足以下任一条件:
- 文件系统权限为只读(
chmod 444或 Windows 属性勾选) -
files.readonlyInclude配置命中了该路径
但显示 ≠ 锁定。如果 files.saveWithoutWatching 仍为 true,且系统权限未设,VSCode 就会静默覆盖写入。唯一可靠验证方式:关掉标签页再重开,然后 Ctrl+S —— 不弹错就等于没锁住。


















