Notepad++不提供设置只读权限的功能,仅被动响应Windows文件系统中的FILE_ATTRIBUTE_READONLY属性;必须通过资源管理器、attrib命令或PowerShell将文件设为只读,并重新打开才能显示[READ ONLY]、禁用保存。

Notepad++ 本身不提供“设置代码只读权限”的功能,所有只读行为都依赖 Windows 文件系统属性;你看到的 [READ ONLY] 标签、灰掉的 Save 按钮、禁用编辑区,全是它在打开文件时读取 FILE_ATTRIBUTE_READONLY 后的被动响应——不是编辑器控制的,是操作系统告诉它的。
为什么右键菜单里找不到「设为只读」或「Edit → Set Read-Only」
Notepad++ 自 v7.0 起已移除该菜单项。你在当前任何稳定版(v8.x / v9.x / v10.x)中搜索“Read-only”“只读”“Set Read-Only”,结果为空——不是你没找对位置,是它真没了。旧版 Notepad 或某些第三方插件(如老版本 Python Script)曾模拟过该功能,但那是 UI 层面的假锁定,不改文件属性,也拦不住 Ctrl+S 或另存为。
- 所谓“页面变蓝→变灰”“图标右键变灰”等描述,多源自对早期 Notepad 或误传截图的混淆
- 插件无法通过脚本直接调用
SetFileAttributes设置只读位,Windows API 权限限制使然 - 即使装了 Document Monitor 插件,它只监听内容变更,不监听文件属性变化,改了只读属性也不会刷新界面
怎么让 Notepad++ 真正显示 [READ ONLY] 并禁用保存
必须先让文件在磁盘上被标记为只读,然后关闭再重新打开。Notepad++ 只在打开瞬间检查一次,之后完全不刷新状态。
- 资源管理器操作:右键文件 →「属性」→ 勾选「只读」→「确定」;注意:对文件夹勾选只读 ≠ 子文件生效
- 命令行批量处理:
attrib +R "C:\path\to\core\config.xml"(路径含空格必须加英文双引号) - PowerShell 更可控:
Set-ItemProperty -Path "C:\path\to\core\utils.js" -Name IsReadOnly -Value $true - 设完后必须关闭该标签页并重新打开,否则标题栏仍无 [READ ONLY],
Save菜单项也仍是可用状态
为什么点了「另存为」还能绕过只读、甚至原地覆盖成功
这不是 bug,是设计行为:Save As 绕过的是系统写保护逻辑,不是权限校验。能否真正写入,取决于你有没有目标路径的写权限。
- 点击「文件」→「另存为…」或按
Ctrl+Shift+S,可保存到任意可写路径(如桌面副本),最安全 - 若坚持原地覆盖,需先执行
attrib -R "file.conf"清除只读位——但若你对文件无写权限,这步会静默失败 - 「以管理员身份运行 Notepad++」不会自动提升对普通文件的写权限,UAC 不代理文件级权限
- Git 仓库中的文件,
.gitattributes或chmod不影响 Windows 的只读标志,别混用
单靠只读属性防不住手抖,真正防护得靠三层组合
配置文件(如 notepad++.xml、userDefineLang.xml)或团队核心代码模板,仅设只读远远不够——用户随时可以取消勾选,或者复制粘贴覆盖内容再点保存。
- NTFS 权限加固:
icacls "C:\path\to\critical.js" /deny "%USERNAME%:(W)",移除当前用户的写入权限(需管理员身份) - 启用周期备份:设置 → 首选项 → 备份 → 勾选「启用会话快照和周期性备份」,间隔设为 3–5 分钟;它存的是 XML 快照,崩溃后可恢复
- 装 Local History 插件:Plugin Admin 安装后,会在每个文件同目录生成分钟级变更记录,右键即可比对或还原
最容易被忽略的一点:Notepad++ 的「退出时备份」只在正常关闭流程中触发,断电、强制杀进程、蓝屏时完全无效——那个 .bak 文件不是保险柜,只是缓兵之计。


















