VS Code内置diff功能足够用,但需掌握调用方式:命令面板用“File: Compare Active File With...”比已打开文件;终端用code --diff比任意路径文件/文件夹;右键对比需启用Explorer: Compare With设置;文件夹比对仅列文件名,无行级差异。

VS Code 内置的 diff 功能完全够用,不需要装插件——但得知道它在哪调、怎么传参、哪些路径格式会失效。
用命令面板快速比较两个文件
最常用场景:临时对比当前编辑的两个文件(比如改前 vs 改后、本地 vs 远程下载的 config)。
- 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)打开命令面板 - 输入
File: Compare Active File With...,回车后会列出最近打开的文件供选择 - 如果目标文件没在编辑器里打开,选中后它会被临时加载进内存比对(不保存、不覆盖)
- 注意:
Compare Active File With...只能比当前已打开的文件;若要指定任意路径,得用终端命令方式(见下一条)
用终端命令行触发跨路径文件/文件夹比对
VS Code 的 code 命令行工具支持 --diff 参数,这是真正灵活的方式,尤其适合 Git 仓库内比对、脚本集成或比对未打开的文件。
- 确保已安装命令行工具:打开 VS Code →
Cmd/Ctrl+Shift+P→ 输入Shell Command: Install 'code' command in PATH并执行 - 比两个文件:
code --diff /path/to/old.js /path/to/new.js
- 比两个文件夹(仅限 VS Code 1.85+):
code --diff ./src/ ./src-backup/
—— 注意结尾斜杠不是必须的,但路径必须存在且可读 - 错误提示
Cannot read property 'fsPath' of undefined通常是因为某路径不存在,或含空格未加引号(Linux/macOS 下需用单引号包裹含空格路径)
右键菜单里没有“Compare with”?检查资源管理器设置
默认情况下,资源管理器里选中两个文件 → 右键 → 应该出现 Compare with [filename]。如果没出现,大概率是被禁用了。
- 打开设置(
Ctrl+,),搜索explorer.compareWith - 确认
Explorer: Compare With选项为启用状态(勾选) - 该功能只在资源管理器中生效,且仅支持同时选中**恰好两个**文件(不能多选、不能选文件夹)
- 如果选中的是同一文件的不同版本(如 Git 修改状态),右键还会额外显示
Compare with HEAD等 Git 相关项
文件夹比对的实际限制和替代方案
VS Code 原生 --diff 对文件夹的支持很基础:只展示差异文件列表,不递归展开内容比对,也不能点开看具体行级差异。
- 它本质是调用
git diff --no-index的封装,所以不依赖 Git,但行为类似:只列变更文件名 + 新增/删除/修改状态 - 想看文件夹内每个差异文件的逐行内容?必须先双击打开那个文件,再手动触发文件内比对(如用
Compare with Saved) - 需要完整可视化文件夹结构差异(比如忽略某些子目录、高亮新增整个文件夹)?得用外部工具:
diff -r(CLI)、meld、WinMerge或 VS Code 插件如Compare Folders - 别指望内置功能做二进制文件夹比对(如
.zip或node_modules)——它会跳过,也不报错,只是静默忽略
真正容易被忽略的是:文件夹比对结果页无法保存、不能导出、不记录历史,关掉就没了。如果需要留痕,要么截图,要么老实用命令行重跑 diff -r 输出到文件。










