VSCode自带文件对比功能完全够用,但需按三种正确路径触发:资源管理器Ctrl/Cmd多选后右键“Compare with Selected”最可靠;命令面板执行“File: Compare Active File With”要求基准文件已打开并聚焦;标签页右键“Compare with Saved”仅限未保存修改。

VSCode 自带的文件对比功能完全够用,但必须按正确路径触发——双击打开两个文件标签页,再右键“比较”,大概率失败;真正稳的操作只有三种,且每种对上下文有硬性要求。
资源管理器多选后右键 Compare Selected 最可靠
这是唯一不依赖焦点、不依赖已打开状态、不依赖工作区路径的触发方式。只要两个文件在资源管理器中可见(哪怕在桌面或U盘里),就能比。
- 在资源管理器中按住
Ctrl(Windows/Linux)或Cmd(macOS),依次点击两个文件(先点的为左侧,后点的为右侧) - 右键任一选中文件 → 出现
Compare with Selected项(不是Compare with...后缀带文件名的那个) - 如果菜单里没这个选项,说明你只选了一个,或没按住修饰键多选
- 路径含空格、中文、
%20或过深嵌套时,VSCode 可能静默失败,此时把文件复制到~/tmp/或C:\temp\再试
命令面板执行 File: Compare Active File With 更灵活
适合一个文件已打开、另一个在别处(比如刚下载的配置备份、邮件附件解压出来的 JSON)。它不要求目标文件在当前工作区,但要求“活动编辑器”里正打开且聚焦着基准文件。
- 先用任意方式打开第一个文件(如双击、拖入、
Ctrl+O),确保它的标签页是高亮的(即焦点在它上面) - 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS),输入File: Compare Active File With并回车 - 在弹出的文件选择器中导航并选中第二个文件——它甚至可以不在当前工作区,也不必提前打开
- 如果命令面板里搜不到该命令,说明当前没有活动文件,或 VSCode 没识别到编辑器焦点
diff 视图里空格和缩进差异不显示?检查 ignoreTrimWhitespace
默认开启 diffEditor.ignoreTrimWhitespace,所有行首尾空格、制表符、换行符差异都会被忽略。这不是 bug,是设计上优先过滤格式噪音,但协作中常因此漏掉末尾空格误删或缩进混用问题。
- 点 diff 视图右上角
⋯→ 取消勾选Ignore Trimmed Whitespace - 此时空格会显示为浅灰色小点,
\t和\n差异也会标出 - 这个设置只影响当前 diff 标签页,不影响其他已打开的对比窗口
- 若想全局生效,改用户设置里的
diffEditor.ignoreTrimWhitespace,但已有 diff 窗口不会刷新,需重启或重开
中文乱码、大量假差异、Diff 显示 no differences?先统一编码
VSCode 的 diff 基于文本解析,若两个文件编码不一致(比如一个 UTF-8 BOM,一个 GBK,或一个 LF 一个 CRLF),就会出现整块红绿错位、空行爆炸、甚至直接显示 no differences。
- 打开每个文件,看右下角状态栏显示的编码(如
UTF-8、GBK、UTF-8 with BOM) - 点击该编码文字 → 选择
Save with Encoding→ 统一存为UTF-8 - 再重新触发对比;若仍异常,检查换行符:右下角点击
CRLF或LF→ 统一为LF - Git 仓库中被
.gitattributes强制转换换行符的文件,也可能导致 diff 错乱,此时建议用git show HEAD:xxx验证原始内容
真正容易被忽略的是:diff 视图里的“接受更改”按钮(> 或 )只同步文本,不触发格式化、不校验语法、不运行保存钩子——改完得手动 <code>Ctrl+S 才生效,也才触发后续检查。


















