Notepad++无原生“大小写互转”功能,Ctrl+U/Ctrl+Shift+U仅单向转换,Scintilla底层不支持toggle;需用正则分两步:[a-z]→U$0、[A-Z]→\L$0,且必须勾选正则模式。

Notepad++ 没有原生的“大小写互转”功能(即 a→A、A→a 一对一翻转),按 Ctrl+U 或 Ctrl+Shift+U 只能单向转小写或大写,不是 toggle。
为什么找不到「Toggle Case」菜单或快捷键
Notepad++ 的编辑菜单里只有 Edit → Convert Case to → Upper Case、Lower Case 和 Title Case,没有 Toggle Case。这不是你漏看了,是它真没实现。Scintilla 底层也不提供 toggle 接口,所以所有版本(包括最新 v8.6.x)都不支持字母级逐个翻转。
- 所谓“互转”,实际是用户误把“先转大写、再转小写”理解成 toggle,但两次操作无法还原原始混合状态(比如
HeLLo→ 全大写 →HELLO→ 全小写 →hello,丢了大小写信息) - 右键菜单默认不显示任何大小写选项,必须从顶部菜单或用快捷键触发
- 部分插件(如 Python Script)可写脚本模拟 toggle,但需手动安装、启用、授权执行——不是开箱即用
想实现真正字母级大小写翻转,只能靠正则替换
Notepad++ 的查找替换支持 U(转大写)、L(转小写),但不支持 u(首字母大写)或 l(首字母小写)这类单字符控制符;更没有 T 这种 toggle 语法。所以必须分两步走:
- 先匹配所有小写字母,替换成对应大写:查找
[a-z],替换为U$0($0表示整个匹配项) - 再匹配所有大写字母,替换成对应小写:查找
[A-Z],替换为L$0 - 两个步骤不能合并——因为
[a-zA-Z]一起替换时,U$0会把所有字母全转大写,起不到翻转效果 - 注意勾选「正则表达式」模式,否则
[a-z]当字面量处理,不生效
Ctrl+U 为什么有时像“互转”成功了
这是错觉。典型场景是:你选中一段纯大写文本(如 HTTP_STATUS),按 Ctrl+U → 变成 http_status;再按一次 Ctrl+Shift+U → 变成 HTTP_STATUS。看起来像来回切换,但本质是“全转小写→全转大写”,中间丢失了所有原始大小写结构(比如 XmlHttpRequest 会被打平成 xmlhttprequest 再变回 XMLHTTPREQUEST)。
- 没选中文本时,
Ctrl+U会作用于整篇文档,极易误操作 - 如果文档编码不是 UTF-8 或 ANSI(比如 GBK 且含重音字符),
[a-z]类正则可能漏匹配,导致部分字母没被翻转 - 数字、中文、下划线、连字符等完全不受影响,只动 ASCII 字母 A–Z / a–z
真正容易被忽略的是:大小写转换不感知上下文
比如你想把 HTML 中 class="Btn Primary" 里的 Btn 和 Primary 翻转成 btn 和 primary,但保留 class=" 和 " 不动——Ctrl+U 做不到,正则 [a-z] 也做不到(它会把引号、等号、空格全当分隔符跳过,但无法限定只在引号内生效)。必须先用 class="([^"]*)" 提取内容,再对捕获组做替换,而 Notepad++ 的替换不支持嵌套操作,只能人工分步或靠插件。


















