ctrl+j(windows/linux)或cmd+j(macos)仅对真实选中的多行生效,不处理多光标、软折行或单行末尾未扩展选区;默认以空格连接,需正则替换实现自定义分隔符,并须预先清理空行与行尾空格。

Ctrl+J(Windows/Linux)或 Cmd+J(macOS)能直接合并选中的多行,但必须真实选中、不能是多光标,且默认加空格分隔——这不是 bug,是它本来的设计逻辑。
为什么 Ctrl+J 按了没反应?
不是快捷键坏了,而是 Sublime 没识别到“有效多行选区”:
- 用
Ctrl+Click或Ctrl+Shift+L创建的多个光标 ≠ 选区,join_lines完全不处理 - 从网页或 Excel 粘贴进来的是软折行(soft wrap),文本里根本没有
\n,Ctrl+J找不到换行可连 - 光标停在单行末尾但没按住
Shift+↓扩展选区,此时Ctrl+J只会拉下一行上来,仅一次 - macOS 上搜狗、百度等中文输入法常劫持
Cmd+J,关掉输入法再试
确认是否真选中:看窗口右下角状态栏是否显示类似 3 lines selected。没有就重来——鼠标拖选,或 Ctrl+L 选整行后连按多次 Ctrl+L 向下追加。
想用逗号/分号/不留空格,别硬改 Ctrl+J
join_lines 固定用空格连接,没法动态切换分隔符。需要自定义分隔,必须走正则替换:
- 打开替换面板:
Ctrl+H/Cmd+H - 点右上角
.*启用正则模式 - 在
Find What输入:\r?\n(覆盖 Unix 和 Windows 换行) - 在
Replace With填:,(逗号加空格)、;、或留空(无缝拼接) - 务必先选中目标区域再点
Replace All,否则会删掉整个文件的换行
注意:Ctrl+J 会保留原行末尾空格,比如 item1␣ + item2 → item1␣item2;而正则替换不会自动带入这些空格,更干净。
合并前不清理空行和尾部空格,结果容易出错
常见翻车现场:
- 选中
a+ 空行 +b,Ctrl+J出来是a b(中间一个空格),但空行本身被当成“一行”参与连接,语义已乱 - 某行以
# comment结尾,Ctrl+J后变成# commentnext_line_content,Python 直接报错 - 行尾有看不见的空格,合并后变成
item1␣,item2,CSV 解析失败
推荐两步走:
- 先用正则删空行:
Find输入^\s*$\n,Replace留空,点Replace All - 再用
Ctrl+Shift+P→Trim Trailing White Space清理所有行尾空格 - 最后才执行
Ctrl+J或正则替换\r?\n
TrailingSpaces 插件能实时标红行尾空格,装一个比每次手动检查快得多。
Mac 上 Cmd+J 失效?先查系统级冲突
尤其 2026 年新 macOS 版本 + 第三方输入法组合下,Cmd+J 被劫持是高频问题:
- 临时切到英文输入法(
Cmd+Space),再试Cmd+J - 进系统设置 → 键盘 → 快捷键 → 输入源,检查是否有其他应用绑定了
Cmd+J - 搜狗输入法设置里常默认开启「快捷键呼出词典」,关掉它
如果仍不行,可手动绑定一个不冲突的键位:打开 Preferences → Key Bindings,加一行:
[{"keys": ["ctrl+alt+j"], "command": "join_lines"}]
然后用
Ctrl+Alt+J 替代。真正麻烦的不是怎么合并,而是合并后要不要空格、哪些空行该留、注释行怎么躲开——这些细节不提前处理,后面调试花的时间远超操作本身。











