vs code内置比较需两个已打开且至少一个活动的文件标签页,快捷键为ctrl+k→ctrl+d(win/linux)或cmd+k→cmd+d(macos),未命名或未保存文件可能导致失败,编码不一致亦影响对比效果。

用内置命令比较当前打开的两个文件
VS Code 自带 File: Compare Active File With... 命令,但前提是必须有两个已打开的编辑器标签页(tab),且当前焦点在其中一个上。它不会自动识别“刚改完想对比”,得手动触发。
- 快捷键:Windows/Linux 是
Ctrl+K→Ctrl+D,macOS 是Cmd+K→Cmd+D(注意是连按两组,不是同时按) - 操作前确认:两个文件都已在编辑器中打开,且至少一个处于「活动状态」(即你正看着它、光标在里面)
- 常见误操作:只打开一个文件就按快捷键 → VS Code 会弹出「No file to compare with」错误提示
- 对比结果以并排视图呈现,左侧是当前活动文件,右侧是你选中的另一个文件;修改行会高亮,删除/新增块会带箭头指示
没保存的临时文件也能比,但有陷阱
VS Code 允许比较未保存的脏文件(unsaved file),比如你改了一半的 index.ts 和磁盘上原始版本。但这里有个关键限制:如果右侧文件从未保存过(比如新建标签页还没命名),Compare Active File With... 会直接失败。
- 安全做法:先用
Ctrl+S(或Cmd+S)保存新文件到临时路径,哪怕只是/tmp/test.js,再选它做对比目标 - 为什么这样?因为 VS Code 的对比逻辑依赖文件 URI,无路径的编辑器标签没有有效 URI,无法构造比较上下文
- 另一个坑:如果两个文件编码不同(如 UTF-8 vs GBK),对比时可能显示乱码或错位,建议统一用
Save with Encoding转成 UTF-8 再比
用命令行 diff 工具补位更可靠
当内置对比不满足需求——比如要忽略空格、比二进制、或复现 CI 环境下的差异——就得切到终端。VS Code 内置终端(Ctrl+`)配合系统 diff 或 git diff 更可控。
- 前提:两个文件都已保存,知道它们的绝对路径(右键标签页 →
Copy Path) - 简单对比:
diff -u /path/a.js /path/b.js,输出符合 patch 格式,适合人眼扫 - 忽略空格变化:
diff -w -u a.js b.js;忽略大小写:diff -i -u a.js b.js - 如果文件在 Git 仓库里,且你想看和上次提交的差异:
git diff --no-index a.js b.js(Git 2.29+ 支持) - 注意:Windows 用户若没装 Git Bash 或 WSL,
diff命令默认不可用,别硬试
扩展不是必需,但能解决特定场景
纯文本对比够用,但遇到 JSON、YAML、HTML 这类结构化格式,或者需要合并编辑,原生功能就吃力了。这时可考虑轻量扩展,而非全功能 diff 工具。
-
Compare Folders扩展:解决「当前打开的 A 文件夹 vs 另一个 B 文件夹」的批量比对,不是单文件 -
JSON Diff扩展:对两个 JSON 文件做语义级比较(忽略字段顺序、字符串引号类型),适合 API 响应比对 - 不推荐装
Compare It!这类重型扩展:它会劫持Ctrl+K Ctrl+D快捷键,且启动慢,反而掩盖原生逻辑 - 所有扩展都要求文件已保存;未保存的 tab 依然无法被识别为有效输入源
Ctrl+K Ctrl+D 就行。真正容易卡住的是:忘了文件必须已打开、忘了未命名标签页不能参与对比、以及误以为没保存也能拿磁盘版来比——这三个点踩中一个,整个流程就断了。










