Sublime Text 不支持反选书签,因书签仅为行号标记,与选区机制无关;需通过正则匹配保留书签行或按列定位多光标操作实现类似效果。

Sublime Text 没有“反选书签内容”这个操作——书签是行级标记,不是选区,不能被反选。 你真正想做的,大概率是“保留书签所在行,删掉其他所有行”,或“对非书签行批量编辑”。这不是选区翻转问题,而是筛选+替换问题。
为什么不能用 Selection: Invert Selection 处理书签
书签(Bookmark)和选区(Selection)在 Sublime 内部是完全独立的机制:
- 书签只记录行号,不生成任何可操作的选区;
- Selection: Invert Selection 命令只响应当前已存在的字符级选区,对书签列表完全无感知;
- 即使你先按 F12 打了 5 个书签,再全选(Ctrl+A),再执行 Selection: Invert Selection,它反选的是“全选之外的空白区域”,和书签位置毫无关系。
想保留书签行、删掉其余内容?用正则替换最稳
这是最常见也最可靠的做法。核心思路是:把书签行提取出来,其他行清空。前提是书签行内容有辨识度(比如含 TODO、def、或唯一字符串):
- 先按
Ctrl+Shift+P输入Bookmarks: Show,确认你要保留的行在列表中; - 记下其中一行的**精确开头内容**(如
def parse_config(),注意手动转义正则特殊字符(.→\.,(→\(); - 按
Ctrl+A全选,再按Ctrl+H打开替换面板,勾选Regular Expression; - 在
Find What中输入:^(?!(def\ parse_config\().*$\n?(把括号内换成你复制的实际内容); -
Replace With留空,点Replace All。
⚠️ 多行保留?把多个模式用 | 连起来:^(?!(def\ parse_config\(|# TODO|if __name__ ==)).*$\n?,但记得每个分支里的特殊字符都要单独转义。
不想靠内容识别?用列定位 + 多光标模拟“反向操作”
如果书签行结构高度一致(比如都是第 3 列开始有标识符),可绕过书签本身,直接按位置操作:
- 先用
Ctrl+G跳到第一处书签行号,按Ctrl+Shift+L拆出多光标; - 再按
Ctrl+←或Home移到行首,Shift+→选中前 N 个字符(比如前 3 列),观察是否能覆盖所有目标行的标记位; - 按
Ctrl+H,查找^.{3}(假设标记占 3 列),替换为你要的内容; - 这样所有“标记列”都被统一处理,而没打书签的行因不匹配
^.{3}不受影响——效果接近“只动书签行”。
真正容易被忽略的是:书签不参与任何选区计算,也不影响正则上下文。依赖书签做批量编辑,必须先把它转化为可匹配的文本特征(内容、位置、缩进等),否则就只能手动逐行操作。

















