正确方法是先用Ctrl+Shift+L拆多光标,再统一按End(Win/Linux)或Cmd+→(macOS)移至行尾,遇空格需连按两次End或改用Ctrl+→+→,最后输入分隔符并Esc退出;正则$匹配行尾位置,预处理去尾空格可提升准确性。

用 Ctrl+Shift+L 拆光标后,必须手动移到行尾再输分隔符
直接按 Ctrl+Shift+L(Windows/Linux)或 Cmd+Shift+L(macOS)不会让光标自动跳到行尾——它只把每行的选区终点变成一个光标点。如果选区结束在中间或缩进里,光标就停在那儿,此时输入分隔符(如 |、,)会插错位置。
正确流程是:
- 先用
Ctrl+L逐行选中,或鼠标拖选整段目标文本 - 再按
Ctrl+Shift+L拆出多光标 - 统一按
End(Win/Linux)或Cmd+→(macOS)将所有光标移到可视行尾;若某行末尾有空格,End可能卡在空白处,此时连按两次End或改用Ctrl+→+→ - 输入分隔符,比如
|,所有行同步响应 - 最后按
Esc退出多光标模式,避免后续误操作
正则替换加行尾分隔符更稳,但 $ 不等于“换行符前”
$ 在 Sublime 正则中匹配的是“行尾位置”,即换行符之前、最后一个非换行字符之后的位置。它不消耗字符,也不包含换行符本身。这意味着 $ → | 是安全的,不会破坏换行结构。
但要注意这些实际表现:
- 空行也会被
$匹配,替换后变成单独一行|,可能不是你想要的 - 如果某行末尾有空格或制表符,
$仍匹配在换行符前,|会插在空白之后,结果像foo | - 想过滤掉尾部空白?先执行
\s+$→ 空,再做$→| - 想只处理非空行?用
^(?!\s*$).*$→$0|,但需确认文件无混合换行符(\r\n和\n共存时部分行可能漏掉)
列选择(Alt+拖选)只适合固定列插入,不适用行尾场景
按住 Alt(Win/Linux)或 Option(macOS)竖向拖选,本质是“在第 N 列插入”,不是“在每行末尾插入”。每行长度不同,强行用列选择加行尾分隔符,结果就是分隔符歪斜错位,看起来像表格崩了。
它只适合这些情况:
- 所有行等宽,比如导出的 CSV 原始数据
- 你想在第 20 列统一加
|对齐字段,而非追加到逻辑行尾 - 配合正则预处理过,已把各字段右对齐到同一列
一旦行长短不一,列选择就失效——这不是操作错误,是模式用错了。
真正麻烦的是“行尾”的定义不统一
Sublime 里没有一个命令叫“跳到真实行尾”。End 跳到视图行尾,Ctrl+→ 跳词,Move to Line End 命令要手动调用,而正则 $ 又受空行、空白符、BOM、混合换行符影响。同一个操作,在日志片段、SQL 查询结果、Python 代码块里,“行尾”所指可能完全不同。
所以别迷信“一键搞定”。先看数据:有没有空行?末尾有没有空格?是否混用 \r\n?语法高亮是否干扰判断?再决定用多光标微调,还是正则分步清理+替换。最常被忽略的,其实是保存前用 Ctrl+Shift+P → Trim Trailing Whitespace 预处理一遍——这一步省掉一半排错时间。

















