sublime text 多行拼接需满足选区含换行符、清除行尾空格与空行、统一换行符三条件;ctrl+j 仅空格分隔,自定义分隔符须用正则替换\r?\n。

Sublime Text 里多行拼接不是“按 Ctrl+J 就完事”,而是选区、换行符、空格三者耦合的结果;不清理干扰项就硬按,90% 会出错。
为什么 Ctrl+J 按了没反应或只拼两行
这不是快捷键失效,是 join_lines 对选区有硬性要求:
- 没选中任何文本时,
Ctrl+J只把光标所在行和下一行拼一次,不会遍历全部 - 选区必须包含每行末尾的换行符:用鼠标拖选得拉到末行**之后**(看到光标跳到下一行开头才算包住);用
Shift+↓扩展时,最后一行得再按一次 ↓ 让光标落到空行或下文开头 - 中文输入法(尤其 macOS 上的搜狗、百度)常拦截
Cmd+J,切英文输入法再试 - 多光标(
Ctrl+Click或Ctrl+Shift+L)不被识别为“多行选区”,join_lines会对每个光标单独执行“拼下一行”,结果错乱 - 从网页、Excel 粘贴的内容可能只有软折行(soft wrap),文本里根本没有
\n,Ctrl+J自然无从下手
用 join_lines 前必须清理的三项干扰
join_lines 不做预处理,原样保留行尾空格、制表符、空行和混合换行符——这些才是拼接后出现双空格、单词粘连、语法错误的根源:
- 先执行
Ctrl+Shift+P→ 输入Trim Trailing White Space,清除所有行尾空白;否则foo <space>\nbar</space>会变成foo <space> bar</space> - 空行不能留:打开替换面板(
Ctrl+H),正则模式开,查找^\s*$\n,替换为空 —— 这比^$\n更可靠,能干掉含空格或 Tab 的“伪空行” - 统一换行符:粘贴自不同系统的内容常混着
\r\n和\n,建议先点File → Line Endings → Unix (LF),避免后续正则漏匹配
要逗号、竖线或不留分隔符?别碰 Ctrl+J
join_lines 的分隔符写死为空格,改不了。需要自定义分隔符,唯一可靠路径是正则替换:
- 选中目标区域(或全选
Ctrl+A) - 按
Ctrl+H打开替换面板,点亮.*按钮启用正则模式 - 查找框填
\r?\n(兼容 Windows/macOS/Linux 所有换行变体) - 替换框填你要的分隔符,比如
,、|或留空(无缝拼接) - 若只想替换选区内的换行,按
Alt+R开启「在选区中替换」,避免误动全文 - 关掉
Match Case和Whole Word,否则可能漏匹配
真正容易被忽略的耦合点
你看到的“拼接失败”,几乎全是 \r\n vs \n 和行尾空白共同作用的结果。不是命令有问题,而是这两者让 join_lines 的行为变得不可预测——比如某行末尾有空格 + \r\n,拼出来就是两个空格;又或者空行夹在中间,直接导致 item1 item2 中间多一个空格。正则替换虽稳,但若没限定选区,Replace All 会删掉函数之间、段落之间的合理换行,这点必须手动确认。











