filediffs是sublime text稳定可用的文件对比插件,需通过package control安装;默认仅添加右键菜单和快捷键,不自动弹窗或新增菜单项;并排对比需手动拆分视图并拖拽diff标签;中文乱码或错位源于编码(如utf-8/gbk)和换行符(crlf/lf)不一致,须提前统一;一键并排对比需自定义插件命令绑定。

Compare插件没反应?先确认是否装对了包
Sublime Text 本身不带原生文件对比功能,Compare 是第三方插件名,但实际常用的是 Diffy 或 FileDiffs——很多人搜“Compare”却装了名字近似但功能不全的包,比如 Compare Folders(只比目录结构)或 Compare Side-By-Side(已多年未维护、不兼容 Sublime 4)。
- 真正稳定可用的是
FileDiffs:支持右键菜单、快捷键、并排高亮差异,Sublime 3/4 全兼容 - 安装方式必须通过 Package Control:按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入Package Control: Install Package,再搜FileDiffs - 装完不会自动弹窗或提示,也不会在菜单栏新增“Compare”项——它默认只加右键菜单和快捷键
右键对比后没并排显示?检查视图布局是否被覆盖
FileDiffs 默认行为是把差异内容输出到新标签页(纯文本 diff),不是并排窗口。要并排看,得手动触发视图拆分:
- 先用右键 →
FileDiffs: Compare with Clipboard或Compare to Other File... - 然后立刻按
Alt+Shift+2(Windows/Linux)或Cmd+Alt+2(macOS)切为左右两栏 - 再把刚生成的 diff 结果拖进右边栏(或用
Ctrl+Tab切换标签后拖拽) - 更省事的办法:提前把两个待比文件都打开,用
Ctrl+K, Ctrl+2拆分视图,再分别在左右栏右键选FileDiffs: Compare Current File with Other File...
常见错误:直接双击打开两个文件,默认是单栏堆叠,此时即使运行对比命令,diff 结果也会挤在同一个标签里,看不出哪行变了。
对比结果里中文乱码或空行错位?编码和换行符不一致
FileDiffs 不做编码转换,它按文件原始字节比对。如果一个文件是 UTF-8 with BOM,另一个是 GBK,或者一个用 \r\n、另一个用 \n,就会出现:
- 大量红色删除行 + 绿色新增行,但内容其实一样
- 中文显示为
或方块,diff 块错位 - 行号对不上,看起来像“多删了一整段”
解决方法只有前置统一:
- 在 Sublime 里打开每个文件,右下角点编码名(如
UTF-8),选Reopen with Encoding→UTF-8 - 再点右下角换行符标识(如
Windows (CR LF)),选Convert Line Endings→Unix (LF) - 保存后再对比
别指望插件自动猜编码——它连文件头都不读,只认当前 Sublime 加载进来的文本流。
想用快捷键一键并排对比?自定义命令最稳
FileDiffs 自带的快捷键(如 Ctrl+Alt+D)只做 diff 输出,不拆窗。要真·一键并排,得写个简单命令绑定:
- 菜单 →
Tools→Developer→New Plugin... - 替换内容为:
import sublime import sublime_plugin
class DiffAndSplitCommand(sublime_plugin.TextCommand): def run(self, edit): self.view.window().run_command("set_layout", { "cols": [0.0, 0.5, 1.0], "rows": [0.0, 1.0], "cells": [[0, 0, 1, 1], [1, 0, 2, 1]] }) self.view.window().run_command("file_diffs_compare_with_other_file")
- 保存为
diff_and_split.py,路径是Packages/User/ - 然后在
Preferences → Key Bindings里加:{ "keys": ["ctrl+alt+shift+d"], "command": "diff_and_split" }
注意:这个命令依赖 file_diffs_compare_with_other_file 命令名,它是 FileDiffs 插件注册的真实命令,拼错就无效;另外,如果当前只有一个文件打开,它会卡在“选择另一个文件”对话框,不会报错,但看起来像没反应。
对比这事,表面是点两下,实际卡点都在编码、布局、命令链路这些看不见的地方。插件只是工具,它不会替你决定该用什么编码,也不会记住你上次怎么分屏。











