Sublime Text 无原生“反选”命令,需通过命令面板执行“Selection: Invert Selection”实现;该操作仅在已有选区时生效,依赖括号匹配与语法高亮准确性,反选后为连续选区,编辑行为会同步作用于所有选中部分。

反选操作本身不存在——Sublime 没有“Select Inverse”原生命令
Sublime Text 不像 VS Code 或某些 IDE 那样提供 Select Inverse 或 Invert Selection 的一键命令。所谓“反向选择”,实际是靠组合操作模拟:先选中目标区域,再用命令反选其余部分。这不是功能缺失,而是设计取舍——它把控制权交给用户,避免误操作扩大选区。
- 直接按
Ctrl+Shift+P(macOS 为Cmd+Shift+P)打开命令面板,输入Selection: Invert Selection,回车执行——这是唯一可靠路径,不是快捷键默认绑定 - 该命令只在已有选区时生效;若当前无任何选中,它会报错或静默失败
- 反选后,光标会落在新选区的起始位置,但不会自动滚动到视图中心——长文件里容易“找不到光标在哪”,建议配合
Ctrl+Home或Ctrl+End定位
HTML 去标签时最常用的反选场景
删 HTML 标签却想保留文本内容,是反选最典型的真实需求。盲目全删 ]*> 会吃掉 <script></script> 里的字符串,而反选能绕过语法陷阱。
- 先手动用
Ctrl+Shift+M(或Cmd+Shift+M)选中一对<script>...</script>,再按同样方式选中<style>...</style>(支持嵌套) - 执行
Selection: Invert Selection,此时所有非 script/style 区域被选中 - 再用正则
]*>替换为空,就只删了标签,没动 JS 代码里的<div> <li>注意:如果 script 块里有未闭合标签(如漏写 <code>),Sublime 可能无法正确识别边界,导致反选错位 - 反选后若有 5 处文本被选中,按
Delete会删掉全部 5 块,不是只删一块 - 按
Tab不会缩进——因为 Tab 在多数语法下被绑定为补全触发器;必须用Ctrl+](右缩进)才安全 - 若反选区域包含空行或折叠块,
Ctrl+L会中断当前选区逻辑,变成单行选中;别在反选状态下乱按行操作快捷键 - 鼠标拖选始终是新建选区,不会和已有选区做布尔运算
- 即使你已用
Ctrl+D选了多个单词,再鼠标拖选只会清空之前所有光标,只留下鼠标划出的新区域 - 真正可控的“局部排除”,只能靠先选大范围 →
Selection: Invert Selection→ 再用Ctrl+D或Ctrl+Shift+L精修子集
反选后编辑行为与多光标冲突
反选生成的是普通连续选区(哪怕跨多段),不是多光标;但一旦开始输入、缩进或删除,Sublime 就会按“当前选区数量”同步操作——这点极易误判。
为什么不能靠鼠标拖+Shift 实现反选
有人试图用鼠标从文件头拖到底部,再按住 Shift 往回拖取消某几行——这在 Sublime 中无效。它的选区模型不支持“减法式拖选”,所有鼠标操作都是覆盖而非叠加。
反选不是开关,是分步动作;最常被忽略的是:它依赖初始选区的完整性——括号没配对、引号没闭合、语法模式设成 Plain Text,都会让 Selection: Invert Selection 返回一个看似合理实则错位的结果。











