ctrl+j/cmd+j仅连接光标行与下一行,非为多行选区设计;需确保选区含换行符、无空行及行尾空格,否则失效;定制分隔符须用正则替换\r?\n。

Ctrl+J(Windows/Linux)或 Cmd+J(macOS)是唯一原生快捷键,但它不“合并选区”,只连接光标所在行与下一行——直接按基本等于白按。
为什么 Ctrl+J 按了没反应或只合两行
它根本不是为“多行选区”设计的命令,行为完全取决于当前光标状态和选区边界:
- 没选中任何文本 → 只合并光标所在行 + 紧邻的下一行(不删换行符,也不加空格)
- 鼠标拖选没拉到最后一行末尾 → 选区未包含换行符,最后一行被忽略
- 用了中文输入法(尤其 macOS 搜狗、百度)→ 快捷键被系统拦截,毫无反馈
- 插件如 Emacs Pro Essentials 或 Text Pastry 已重绑
join_lines→ 在Preferences → Key Bindings里搜join_lines就能确认
想让它一次性处理全部选中行,必须满足两个硬条件
Sublime 的 join_lines 命令只在选区“带换行符”且“无空行干扰”时才按预期工作:
- 用
Shift+↓从首行开头逐行向下选,确保光标停在最后一行末尾(含换行符),别靠鼠标粗拖 - 中间有空行?先正则替换:
^\s*$\n→ 留空,Replace All清掉所有“伪空行” - 合并前务必清理行尾空格:按
Ctrl+Shift+P→ 输入Trim Trailing White Space执行;更稳就装TrailingSpaces插件,自动标红并一键清除
需要逗号/无空格/拼 SQL?别碰 Ctrl+J,走正则替换
join_lines 的分隔符写死为空格,无法定制。真要控制输出格式,必须限定选区后走正则:
- 打开
Ctrl+H/Cmd+H,勾选.*(正则模式) - 查找:
\r?\n(兼容\n、\r\n所有换行变体) - 替换:
,(逗号)、(空格)、或留空(无缝拼接) - 关键:先选中目标文本块,再点
Replace All,否则会误删函数之间该留的空行
最常被忽略的是换行符混用和行尾空格耦合——哪怕你用对了 \r?\n,只要某行末尾带空格,替换后就是 item1␣,item2。统一换行格式(File → Line Endings → Unix (LF))和预清理空格,比调快捷键重要得多。











