join_lines命令需显式选中完整多行(含换行符)才批量合并,否则仅拼当前行与下一行;中文输入法、多光标、代码折叠、行尾空白及混合换行符均会导致异常。

join_lines 命令不是“一键合并”,而是“选中即合并”——没选中多行时按 Ctrl+J(Windows/Linux)或 Cmd+J(macOS)只会拼当前行和下一行,不是你想要的批量效果。
为什么 Ctrl+J 按了没反应或只合并两行
这不是功能坏了,是 Sublime 对选区状态极其苛刻:
- 必须显式选中**完整多行**(含行尾换行符),用鼠标拖选最稳;Shift+↑/↓容易漏掉行尾,导致只触发单次拼接
- 中文输入法常劫持
Ctrl+J或Cmd+J,切到英文输入法再试 - 多光标(比如
Ctrl+Click或Ctrl+Shift+L生成的)不被识别为“多行选区”,join_lines直接忽略 - 有代码折叠区域时,被折叠的行不会参与合并,哪怕它在视觉选区内
- 空行会被当成一行处理:选中
ab,结果是a b(中间一个空格),不是 bug,是行为一致
怎么用正则替换实现自定义分隔符
join_lines 的分隔符写死为空格,改不了。要逗号、竖线、不留空格,必须走正则路径:
- 先选中目标文本(避免误改全文)
- 按
Ctrl+H打开替换面板,点.*启用正则模式 - 查找框填
\r?\n(兼容\n和\r\n,比单搜\n更可靠) - 替换框填你要的分隔符:
,、|、或留空 - 想只在选区内替换?按
Alt+R开启「在选区中替换」
合并前必须清理的两个隐藏陷阱
90% 的“合并失败”其实是这两项没处理好,不是命令问题:
-
行尾空格/Tab:Sublime 默认不显示,但join_lines和正则都会原样保留。foo \nbar会变成foo bar(两个空格)。解决方法:Ctrl+Shift+P→Trim Trailing White Space,或装TrailingSpaces插件自动高亮+清理 -
混合换行符:从 Excel、微信、日志粘贴进来的文本,可能同时含\r\n、\n、甚至\r。\r?\n能覆盖前两者,但遇到纯\r得单独加\r(?!\n)补漏
什么时候该放弃 join_lines 改用正则
以下情况硬用 Ctrl+J 会出错,正则才是唯一解:
- 拼 SQL
IN列表:需要每行加引号再逗号连接,join_lines做不到 - 合并 JSON 数组元素:得匹配
\n(?=\s*"),只换引号前的换行,否则会把]和下个{错拼 - 处理 Python 三引号字符串(
"""块):join_lines会吞掉续行符,破坏语法结构 - 跳过注释行或空行:比如只合并
#开头以外的非空行,必须靠正则条件匹配











