不用插件,用命令面板输入File: Compare Active File With是最稳方式,需先打开并聚焦一个已保存文件;右键无Compare选项是因仅在资源管理器多选或已打开文件标签页(另一文件也打开且激活)时才出现。

直接结论:不用插件,用命令面板输入 File: Compare Active File With 是最稳、兼容性最强的方式,前提是先打开并聚焦一个文件。
为什么右键菜单经常找不到 Compare 选项
VS Code 的右键上下文菜单里,“Compare”类选项只在两个地方可靠出现:资源管理器中多选两个文件时,或已打开文件的标签页右键(仅当另一文件也已打开且为活动状态)。编辑器代码区、未保存的 Untitled-1 文件、不在当前工作区的文件,右键根本不会加载对比项——这不是 bug,是设计限制。
- 资源管理器单击一个文件再右键 → 只有
Select for Compare,不是“Compare with” - 两个文件都打开了,但你刚切到终端 → 命令灰显,得先点回文件标签让其获得焦点
- 文件路径含中文、空格或
%20编码 → VS Code 可能静默失败,对比视图空白无提示 - 从 Finder / 文件资源管理器拖文件进 VS Code 窗口 → 只会新开标签页,不触发 diff
File: Compare Active File With 的触发条件和坑
这个命令看似简单,但对上下文极其敏感。它不是全局可用命令,而是严格依赖“当前活动编辑器”的存在和有效性。
- 必须已打开至少一个**已保存的、有真实文件路径的**文件(
file:///URI),Untitled-1会直接失败 - 光标必须落在该文件内容中(即标签页高亮 + 编辑区有焦点),切到搜索框或侧边栏后命令不可用
- 命令面板里输
Compare只能匹配到File: Compare Active File With,别输错成Compare with Clipboard——后者只比当前文件和剪贴板,不是文件间比对 - 选中目标文件后,左侧固定为当前活动文件,右侧为所选文件;顺序不能反,也不支持后期调换
对比结果全是红绿块?先看右下角状态栏
大量“假差异”几乎全是编码或换行符不一致导致的字节级误判,不是 diff 引擎有问题。
- 检查右下角:两边都应显示
UTF-8(不是UTF-8 with BOM)和相同换行符(LF或CRLF) - 不一致时,分别点击状态栏切换 →
Save with Encoding→ 选UTF-8并保存,再重试 - 默认开启
diffEditor.ignoreTrimWhitespace,所有行首尾空格、制表符、空行差异都被忽略;要看到缩进变化,点 diff 视图右上角⋯→ 取消勾选Ignore Trimmed Whitespace - JSON/YAML 等结构化文件,建议先用 Prettier 格化再比,否则格式差异会淹没真实逻辑变更
Diff 视图里能直接改右边的文件吗
可以编辑,但有明确边界:右侧是“目标文件”,修改后需手动保存(Ctrl+S),不会自动写回磁盘;左侧如果是只读源(如 Git 历史版本),则灰显不可编辑。
- 行号旁的
→图标:把右侧改动复制到左侧(Apply to Left),仅在你手动编辑过某行后才激活 - 点
←是把左侧内容覆盖到右侧,操作不可逆,没二次确认 - 关闭 diff 标签页后,编辑器会退回到打开 diff 前的状态;误点
Revert Changes只影响当前副本,不改磁盘文件 - 想留档?右键 diff 标签页 →
Save As可导出 HTML 快照,但它不随源文件更新
真正容易被忽略的是“上下文激活”这个前提——VS Code 不是靠文件内容触发 diff,而是靠编辑器焦点、URI 有效性、编码一致性三者共同锁死。少一个,就变成“点了没反应”或“比出来全是错的”。


















