sublime text无原生一键合并功能,必须依赖命令行(cat/type)、python脚本或手动并排复制;命令行最快但需过滤二进制文件、处理空格路径和编码;脚本可精准控制utf-8/gbk、分隔符与换行;手动法最可靠但仅适用于≤5个文件且需人工干预。

Sublime Text 没有一键合并多个文本文档的原生命令,所有“快速合并”都依赖外部工具链或手动控制——靠菜单点不出来,装插件也绕不开编码、换行、分隔符这三道坎。
用命令行 cat 或 type 批量合并整个文件夹
这是最快、最稳定的方式,尤其适合大量 .txt、.log、.md 文件,不经过 Sublime 内存加载,无卡顿风险:
- macOS/Linux:
cat /path/to/folder/*.txt > combined.txt;注意*不匹配隐藏文件(如.env),要包含得写./folder/.* *.txt并排除.和.. - Windows:
type C:\path\to\folder\*.txt > combined.txt;若路径含空格,必须用双引号包裹:type "C:\my folder\*.txt" > combined.txt - 加文件分隔符防粘连:
for file in ./src/*.txt; do echo "// === $(basename "$file") ===" >> combined.txt; cat "$file" >> combined.txt; echo "" >> combined.txt; done - 务必先过滤二进制文件,否则
cat image.png会把乱码塞进combined.txt;可用file -i *.txt | grep -E "text|charset=utf"筛一遍
用 Python 脚本精准控制编码与分隔逻辑
当文件混用 UTF-8 和 GBK,或需要统一去除末尾换行、插入自定义分隔线时,脚本比命令行更可控:
- 新建
merge.py放在目标目录下,内容如下(显式声明encoding='utf-8'):
import os
files = ['a.txt', 'b.txt', 'c.txt']
with open('merged.txt', 'w', encoding='utf-8') as out:
for f in files:
with open(f, encoding='utf-8') as i:
content = i.read().rstrip('\n')
out.write(content + '\n' + '-'*50 + '\n')
open(..., encoding='gbk') 混用,得单独处理或提前用 Sublime 的 File → Reopen with Encoding → GBK 转存为 UTF-8.rstrip('\n') 是关键:避免两个文件末尾都有换行,导致中间多出空行os.listdir() 返回顺序不可靠;需按字母序合并时改用 sorted(glob.glob("*.txt"))
在 Sublime 里手动并排复制粘贴(零依赖最可靠)
适合 ≤5 个文件、需人工删减/调序/校验内容的场景,避开所有编码和换行陷阱:
- 右键任一标签页 →
Move to New Group,或按Ctrl+Alt+1/2切分视图,把各文件拖到不同列 - 在目标文件(新建或已有)中定位光标,切到源文件 →
Ctrl+A→Ctrl+C→ 切回目标 →Ctrl+V - 每次粘贴后手动加一个空行:
\n是硬性分隔,别指望源文件自带换行对齐 - 特别注意:若某源文件末尾没换行(比如最后一行是
hello而非hello\n),下一段内容会紧贴着写成helloworld,务必提前检查
别碰 Compare Files 插件去“合并”,它只对比不合并
Compare Files 插件能左右高亮差异,但不会帮你选哪边保留,也不识别 Git 冲突标记(如 ),更不处理缩进/空格/换行差异:
- 两文件行序不同(如一个按时间追加、一个按模块分组),对比结果基本不可读
- 空格或
\r\nvs\n不一致,整行标红,哪怕语义完全相同 - 右键 →
Compare Files必须手动触发,拖两个文件进窗口只是并排打开,不是自动对比 - 真要合并冲突?用
smerge或git mergetool,Sublime Text 本身不提供三栏合并能力
真正容易被忽略的是:合并动作本身常暴露上游问题——比如频繁要拼日志、压配置、凑 SQL 条件,说明生成逻辑或数据结构可能更值得重构,而不是靠编辑器补救。











