Sublime Text 无内置“合并重复行”功能,Ctrl+J仅拼接不去重;需先用Sort Lines排序、再用Unique Lines去重、最后Cmd+J合并;或通过插件、正则+shell命令、自定义Python命令实现。

Sublime Text 没有“合并重复行”的内置命令或快捷键,Ctrl+J / Cmd+J 完全不处理去重逻辑——它只拼接,不管内容是否重复。 所有网上搜到的“一键去重合并”,本质是混淆了「合并多行」和「删除重复行」两个完全不同的操作。真要实现,必须分两步:先去重,再合并;且去重本身需借助插件或外部工具。
为什么 Ctrl+J 按了不能去重
join_lines 命令(绑定在 Ctrl+J / Cmd+J)的行为是机械拼接:读取选区内的换行符,替换成空格,并清理首尾空白。它不会比较相邻行文本是否相同,也不会跳过重复项。例如:
apple apple banana
选中这三行按 Ctrl+J,结果是 apple apple banana,而非 apple banana。重复行原封不动保留。
真正可行的去重 + 合并组合方案
Sublime 本身不提供去重功能,但可通过以下路径达成目标(以 macOS 为例,Windows 类似):
- 安装
AdvancedRename或Text Pastry插件(推荐前者),它们含sort_lines和unique_lines命令 - 先选中目标多行 →
Ctrl+Shift+P输入Sort Lines→ 回车(确保重复行相邻) - 再
Ctrl+Shift+P输入Unique Lines→ 回车(删掉相邻重复行,只留一个) - 最后确保选区包含所有剩余行(含末尾换行符)→ 按
Cmd+J合并为一行
⚠️ 注意:Unique Lines 只对已排序的相邻重复行有效;若原始数据乱序(如 apple、banana、apple),必须先 Sort Lines,否则去重失败。
用正则替换实现简单去重合并(仅限单列纯文本)
如果数据格式规整(如每行一个单词,无空格/标点),可用正则一步完成「排序 + 去重 + 合并」,但需配合外部命令(如 Unix sort -u):
- 选中目标块 →
Ctrl+Shift+P输入Shell Command: Run Shell Command - 输入:
sort -u | tr '\n' ' '(Linux/macOS)或sort.exe /unique | sed 's/\r\n/ /g'(Windows PowerShell) - 回车后,选区即被替换成去重后、空格分隔的单行
该方式绕过 Sublime 内部限制,但要求系统装有对应命令;且 tr '\n' ' ' 末尾会多一个空格,后续需手动删或加 | sed 's/ $//'。
高频使用建议:自定义命令绑定快捷键
若每天处理 CSV 列表、日志关键词等重复数据,可将上述流程封装成自定义命令:
- 菜单
Tools → Developer → New Plugin…,粘贴如下 Python 片段:
import sublime
import sublime_plugin
import subprocess
import platform
<p>class UniqueAndJoinCommand(sublime_plugin.TextCommand):
def run(self, edit):
for region in self.view.sel():
if region.empty():
continue
text = self.view.substr(region)</p><h1>sort -u + join with space</h1><pre class='brush:php;toolbar:false;'> cmd = ['sort', '-u']
if platform.system() == "Windows":
cmd = ['sort.exe', '/unique']
try:
result = subprocess.check_output(cmd, input=text.encode(), stderr=subprocess.STDOUT)
joined = result.decode().replace('\n', ' ').strip()
self.view.replace(edit, region, joined)
except Exception as e:
sublime.status_message("Unique & Join failed: " + str(e))- 保存为
unique_and_join.py,再在Preferences → Key Bindings中添加:
[{"keys": ["ctrl+alt+u"], "command": "unique_and_join"}]之后选中任意文本块,按 Ctrl+Alt+U 即完成去重+空格合并。注意:此命令不处理中文路径或含空格的 Windows 命令,生产环境建议改用 Python 内置 set() + sorted() 实现,避免依赖 shell。
最常被忽略的是:去重前未排序,或误把 Ctrl+J 当作万能合并键——它连基础去重都做不到,更别说识别语义重复(如 "foo " 和 "foo")。别省那一步 Sort Lines,否则得到的只是拼错的假结果。


















