alt+鼠标拖选(windows/linux)或cmd+shift+鼠标拖选(macos)是最直接的列删除方式,需关闭软换行,对tab/空格对齐文本均有效,优先于正则以避免多字节字符和缩进错乱问题。

用 Alt+鼠标拖选实现列删除(Windows/Linux)
这是最直接、不依赖内容结构的列删除方式。按住 Alt 键(Windows/Linux),再按住鼠标左键从上到下拖出一个矩形区域,松手后就选中了所有行同一列范围内的字符。直接按 Delete 或 Backspace 即可清除。
- 拖选前确保没开启软换行(
View → Word Wrap关闭),否则列会错位 - 如果行数太多拖不动,先
Ctrl+A全选,再Ctrl+Shift+L拆光标到每行行尾,然后用Ctrl+→移动所有光标到目标列位置,最后Ctrl+Shift+↓向下扩展选区 - 这种方式对 Tab 对齐或空格对齐的文本都有效,不关心字符是否为 Tab 或空格
macOS 上用 Cmd+Shift+鼠标拖选列
macOS 下没有 Alt 列选逻辑,而是用 Cmd+Shift + 鼠标左键拖动实现同样效果。注意不是 Option —— macOS 的 Option 键在 Sublime 中默认绑定为“列选择开关”,但实际行为受系统输入法和键盘设置干扰较大,优先用 Cmd+Shift 组合更稳。
- 若拖选后光标没对齐,检查是否开启了「Use Vintage Mode」或装了冲突插件(如 Emmet)
- 拖选时若某行太短,选区会自动截断,不会报错也不会跨行补空 —— 这是预期行为,不是 bug
删固定列位置却要靠正则?别硬来
想删“每行第 12–15 字符”,看似适合正则,但容易踩坑:
-
^.{11}(.{4})看似简洁,但前提是每行至少有 15 个字符;少于 15 的行会被跳过,删不干净 - Tab 不被
.匹配,必须显式写成\t,否则列数全乱 - 正则替换对含中文、emoji、ANSI 转义序列的文本极不友好,
.可能误吞多字节字符
所以除非你确认数据格式高度统一(比如纯 ASCII 日志),否则优先用列选,而不是正则。真要用正则,务必先 Ctrl+F → Find All 确认高亮完全覆盖目标列,再点 Replace All。
删完发现缩进崩了?那是没处理 Tab 和空格混合
列删除后常见问题是:原本对齐的代码块变歪,尤其在 Python 或 YAML 中。这是因为:
- 原始对齐用了 Tab,而你用列选删的是“视觉列”,但 Tab 在不同编辑器里宽度可能为 2/4/8,Sublime 默认显示为 4,但文件里仍是单个
\t字符 - 删除后空格和 Tab 混在一起,语法解析器(如 Pylint、YAML parser)直接报错
解决办法只有两个:
- 删之前先
Ctrl+Shift+P → Convert Indent to Spaces,把所有 Tab 统一转为空格,再列删 - 或删完后立刻
Ctrl+Shift+P → Reindent,让 Sublime 自动重排缩进(仅对语法识别准确的文件类型有效)
列删除本身不改语义,但它暴露的是原始缩进的脆弱性——这点比怎么删更重要。











