sublime text无真正“一键只读模式”,唯一有效防护是系统级只读:windows设文件属性只读、macos勾选“锁定”、linux执行chmod a-w;插件或view.set_read_only(true)仅为视图层软标记,可被绕过,不改文件权限位。

Sublime 没有真正意义上的“一键只读模式”
所谓“一键切换”,在 Sublime Text 中并不存在系统级生效的快捷键。所有声称“按 Ctrl+Shift+R 就锁文件”的插件或教程,本质都是视图层标记,不改文件权限位。你按 Ctrl+S 时是否报错,只取决于操作系统是否允许写入——而这个判断发生在内核层,Sublime 根本没机会“拦截”。能拦住保存动作的,只有 Permission denied;能触发这个错误的,只有提前设好的文件系统只读权限。
真正起作用的只读:必须用操作系统命令提前锁定
你在 Sublime 里打开文件前,就得把文件设为只读。否则无论插件、控制台命令还是设置项,都只是纸糊的门。
- Windows:右键文件 → “属性” → 勾选“只读” → 点“应用”,再勾选“将更改应用于此文件夹、子文件夹和文件”(否则同目录下其他文件漏锁)
- macOS:右键 → “显示简介” → 滚动到底部 → 勾选“锁定”(注意不是“共享与权限”里的读写设置)
- Linux/macOS 终端:
chmod a-w /path/to/file(必须是a-w,不是-w;少个a只改当前用户,组或其他人仍可写)
设完立刻生效:Sublime 底部状态栏显示 read only,按 Ctrl+S 弹窗报错 Unable to save <filename>: Permission denied</filename>。它甚至不尝试写磁盘,因为 fopen(filename, "w") 直接被内核拒绝。
view.set_read_only(True) 是什么?为什么别依赖它
这是 Sublime 的 Python API 提供的视图标记方法,在控制台执行 view.set_read_only(True) 或通过插件调用,只会让标题栏加 [readonly]、粘贴/删除时弹确认框。但它完全不影响底层保存逻辑:
- 保存流程(包括
save_on_focus_lost)不检查该标记,直接走原生写文件路径 - 你手动执行
view.set_read_only(False),或任何插件/脚本调用该 API,保护就立即失效 - 中文输入法、快捷键冲突、多光标操作等场景下,该标记可能被绕过或忽略
它适合临时查看日志副本这类“想看但不想手滑改”的轻量场景,但绝不能用于保护 package.json、settings.py 这类关键源码。
防误改要叠加三件事,缺一不可
只靠“锁文件”还不够。大项目里常有人开着几十个标签页,顺手关错、拖错、热退出丢上下文。真要保重要源码,得同时做三件事:
- 系统级只读:
chmod a-w或 Windows 属性只读 —— 防保存 - 禁用预览标签页:
"preview_on_click": false加入用户设置 —— 防点错文件自动打开只读副本却误以为是原文件 - 关闭热退出:
"hot_exit": false—— 防崩溃后恢复会话时,把只读文件连同未保存修改一起载入(此时只读标记已丢失)
最易被忽略的是第三点:很多人设了只读,又开着 hot_exit,某天 Sublime 崩溃重启,那个 read only 状态就没了,编辑器会把上次打开的文件当作普通可写文件加载——这时候你 Ctrl+S,它真就给你覆盖掉。











