Ctrl+J 失效因 Sublime 仅识别含换行符的连续选区,不支持多光标、软折行或单行末尾悬停;合并后空格乱飞因未清理行尾空格与空行;自定义分隔符须用正则替换;语法错乱因 join_lines 无语法感知,需针对性正则处理。

Ctrl+J 按了没反应?不是快捷键坏了,是 Sublime 根本没识别到“多行选区”
Sublime 的 join_lines 命令(绑定在 Ctrl+J / Cmd+J)只响应「包含换行符的连续选区」,不认多光标、不认软折行、不认单行末尾悬停。常见失效现象包括:
— 状态栏右下角没显示类似 3 lines selected;
— 按一次只合并两行,光标停在新行末尾;
— 从网页或 Excel 粘贴的内容按了毫无反应(实际是软折行,文本里根本没有 \n)。
必须用鼠标从首行开头拖到末行**行尾之后**(光标跳到下一行开头才算包住换行符),或用 Ctrl+L 选中第一行后连按多次 Ctrl+L 向下追加整行。
合并后空格乱飞?90% 是行尾空格和空行没清理
join_lines 不会自动 trim 行尾空白,也不会跳过空行——它只是机械地把换行符替换成一个空格。
— 某行结尾有空格 → 合并后变成 item1␣ item2(两个空格);
— 中间夹着空行 → 合并结果出现 word1␣␣word2;
— Python 注释行末尾带 # comment,下一行直接怼上去变成 # commentnext_line。
务必先做两件事:
— 打开替换面板(Ctrl+H),正则模式开,Find What 填 ^\s*$\n,Replace With 留空,点 Replace All 清空所有伪空行;
— 按 Ctrl+Shift+P → 输入 Trim Trailing White Space 执行,或装 TrailingSpaces 插件一键清除所有行尾空格。
想用逗号/分号/不留空格?别碰 Ctrl+J,直接上正则替换
join_lines 的分隔符写死为空格,无法动态切换。需要自定义分隔符时,唯一可靠路径是正则替换:
— 先选中目标区域(避免误动全文);
— 按 Ctrl+H 打开替换面板,点亮 .* 启用正则模式;
— Find What 填 \r?\n(兼容 \n、\r\n 所有换行变体);
— Replace With 按需填 ,、;、| 或留空;
— 若只想替换选区,按 Alt+R 开启「在选区中替换」。
注意:如果文本是从 Windows 文件或邮件粘贴来的,大概率混着 \r\n 和 \n,单搜 \n 会漏匹配。
合并后语法错乱?不是命令问题,是原始结构被硬吞了
join_lines 不识别语法、不跳过注释、不处理缩进。真实翻车现场:
— Python 中 if x > 0:\n print("ok") 变成 if x > 0: print("ok"),缩进语义丢失;
— JSON 对象 {\n "key": "val"\n} 变成 { "key": "val" },可能缺逗号;
— SQL 参数列表或 Python 三引号字符串("""...)被无差别拼接,结构破坏。
这种场景必须放弃 Ctrl+J,改用更精准的正则,例如:
— 合并 JSON 数组元素:查 \n(?=\s*"),替为 ;
— 处理 SQL IN 列表:限定选区后查 \n,替为 , ;
— 统一换行符:菜单栏 File → Line Endings → Unix (LF),省得正则总要写 \r?\n。

















