sublime text 没有“多行反向选中”功能,所谓反向选中实为通过“selection: invert selection”命令将现有选区翻转,且该命令名称大小写、空格、冒号须严格匹配,仅对当前视图可见区域生效。

Sublime Text 没有“多行反向选中”这个功能,所谓“反向选中”其实是靠已有选区 + Selection: Invert Selection 命令模拟出来的,且只对当前视图内已存在的选区生效——不是一键圈出“没被选中的所有行”,而是把当前选区翻转成“其余部分”。
为什么按 Ctrl+Shift+P 找不到 Select Inverse?
因为 Sublime Text 根本没提供叫 Select Inverse 或 Invert Selection 的命令名。正确命令是 Selection: Invert Selection,大小写、空格、冒号都必须严格匹配。输错一个字符(比如漏掉冒号或写成 selection: invert)就搜不到。
- 必须先有至少一个选区:光标单独停在某处、或选中一段文字、或多行选中,
Selection: Invert Selection才会执行;否则命令面板可能静默失败,不报错也不提示 - 反选后生成的是连续选区(哪怕原始选区是离散的),编辑操作(如删、改、复制)会同步作用于所有被反选中的区域
- 反选结果不会自动滚动到视图中心,长文件里容易找不到光标位置——建议反选后立刻按
Ctrl+Home或Ctrl+End定位
想保留某几行、删掉其余所有内容怎么办?
这不是“反向选中”,而是“反向过滤”,得用正则替换,而不是选区操作。最稳的方式是全选后排除目标行:
- 先把想保留的行内容复制出来(
Ctrl+Shift+K删除该行再Ctrl+C,或直接鼠标选中复制) - 按
Ctrl+A全选整个文件 - 按
Ctrl+H打开替换面板,勾选Regular Expression - 在
Find What输入:^(?!(your exact line content here)$).*$\n?(注意把your exact line content here替换成你复制的那行原文,并手动转义其中的.、$、^等正则特殊字符) -
Replace With留空,点Replace All
⚠️ 多行保留?把多个目标行用 | 连起来:^(?!(line1|line2|line3)$).*$\n?,但注意括号和竖线本身也要转义(如原行含 (,就得写成 \()。
多行编辑时误删了不该删的内容?
常见原因是把 Ctrl+Shift+↑/↓ 当成了“反选快捷键”,但它只是扩展选区方向——而且极易被插件劫持(比如某些标签页管理插件会把它绑定为切换标签)。真正安全的路径只有两条:
- 用
Ctrl+Shift+L把选中文本按行拆成多光标,再手动删不需要的行(适合行数不多、目标明确) - 用正则
^(?!.*keyword).*\n?删除不含关键词的所有行(适合按内容筛选,而非按位置) - 别依赖视觉判断“反选”:Sublime 不支持跨折叠区域、跨视图、跨文件的反向逻辑,一旦文件有代码折叠或分屏,
Selection: Invert Selection仅作用于当前展开可见区域
真正容易被忽略的点是:Sublime 的“反向”永远基于当前选区,而选区本身受语法高亮、括号匹配、折叠状态影响——如果你刚折叠了几段函数,再执行 Selection: Invert Selection,它不会把折叠块当一行来处理,而是按实际展开后的字符位置计算。这意味着,同一份文件,在不同折叠状态下反选结果可能完全不同。











