列选择不支持正则但可与正则互补:它按字符列数竖向框选物理区域,为后续限定范围的正则操作提供精准作用域,二者分工明确——正则识别内容,列选择锁定位置。

列选择本身不支持正则,但能和正则形成互补工作流
Sublime 的列选择(Alt+鼠标拖选 或 Ctrl+Shift+↓)是纯位置驱动的,它不管内容、不认正则、不跳过空行——它只按字符列数“竖着切”。所以你不能在列选区内直接写 ^\s* 去删空白,也不能用 \d+ 提取数字。但它能快速框出“第 8 列到第 15 列”这个物理区域,为后续正则操作铺路。
典型配合场景:你想把 CSV 中第 3 列所有值统一加引号,但该列含逗号、引号、空格,靠 ^.*?,.*?,(.*?), 这类正则容易错位。这时先用列选择框出所有第 3 列的起始/结束位置(比如每行第 20–35 列),再对这个选区单独启用正则替换——范围被物理锁定,正则就不再漂移。
- 列选择后,按
Ctrl+H打开替换面板,勾选.*(正则模式) - 此时查找范围自动限制在当前选区内,哪怕你没全选文件
- 输入
^([^\n]*)$可捕获每行选区内的全部内容,替换为"$1" - 若列内有换行或混合缩进,先按
Ctrl+Shift+P→Convert Indent to Spaces统一空格数,避免列偏移
列选择前用正则预处理,解决“对不齐”的根本问题
很多人列选完发现光标歪了、删错位置,不是快捷键按错了,而是原始文本里混着 \t、BOM、零宽空格,或者某些行开头多了空格。这时候硬拖列选只会放大误差。正确做法是:先用正则把格式拉平,再列选。
- 删所有行首空白:
Ctrl+H→ 查找^[ \t\uFEFF\xA0]*(含空格、Tab、BOM、NBSP),替换为空 - 统一换行符:
File → Line Endings → Unix,否则^和$在 Windows 换行下会失效 - 清理空行:
^\s*$替换为空,避免列选时跳过整行导致错位 - 确认语法识别正常:选中文本后按
Ctrl+Shift+P→Show Scope Name,如果是source.python就比text.plain更准,尤其对缩进敏感的场景
列选择后怎么安全套用正则捕获组?
列选区一旦建立,所有正则操作都只作用于该矩形区域内的字符流,^ 和 $ 的行为会变成“相对于选区起始/结束”,而不是整行。这意味着你不能再依赖 ^.{11}(.{4}) 这种跨行锚定写法——它会把选区当新文档来算。
- 要提取列选区内每行的前 3 个字符,查
^(.{3}),替换成$1(注意:此处^指选区内每行开头) - 想删掉列选区中所有数字,查
\d+,替换为空——不需要g标志,Sublime 默认全局 - 若需跨行匹配(比如列选区内有换行符),必须勾选
. matches newline(Alt+R 两次),否则.不吃\n - 测试时先
Ctrl+F输入正则看高亮是否贴合预期,别直接Replace All;高亮不对,说明列选范围或正则边界没对上
为什么别在列选区里用 Find in Files?
Ctrl+Shift+F(Find in Files)的搜索范围是整个文件或目录,它完全无视你当前有没有列选区。就算你框了一块区域再按这个快捷键,它照样扫全量文件,$1 捕获组也不生效——这是 Sublime 的硬限制,不是操作失误。
- 列选区 + 跨文件操作 = 无意义,得切回单文件上下文
- 真要批量处理多文件中的某列,先用
Ctrl+Shift+F配合正则定位目标行(如^.{20}(\w+)),再手动打开每个匹配文件做列选+替换 - 更稳的替代方案:用脚本(Python +
re)或命令行(awk -F'\t' '{print $3}'),列逻辑交给专业工具,Sublime 只负责人工校验

















