vscode内置diff功能完全够用,最稳方式是资源管理器中ctrl/cmd多选两文件后右键“compare files”,不依赖打开状态、焦点或工作区;编码与换行符须统一为utf-8和lf,否则产生假差异。

VSCode 内置 Diff 功能完全够用,但“能打开”不等于“比得准”——90% 的误判来自触发方式错、编码没对齐、或误信语义 diff 的“智能”。
资源管理器多选后右键 Compare Files 最稳
这是唯一不依赖文件是否已打开、不依赖焦点状态、不依赖工作区范围的操作路径。适用于桌面日志、临时下载的配置、跨项目文件等任意本地路径。
- 在资源管理器中按住
Ctrl(Windows/Linux)或Cmd(macOS),点击选中两个文件 - 右键任一文件 → 选
Compare Files(不是Compare with Selected,后者是旧版菜单名,新版统一为Compare Files) - 左侧固定为第一个选中的文件,右侧为第二个;顺序不可调,想换左右请重选
- 如果右键无此选项,检查设置里
explorer.compareWith是否启用(默认开启)
命令面板 File: Compare Active File With 的硬性前提
这个命令看似灵活,实则卡得最死:必须有一个文件已打开且处于激活状态(光标在其内容中),否则命令灰显或报 No file to compare with。
- 快捷键是
Ctrl+K→Ctrl+D(Windows/Linux),Cmd+K→Cmd+D(macOS),注意是两步连按,不是同时按 - 目标文件可以未打开,VSCode 会临时加载它进内存比对(不保存、不覆盖原文件)
- 目标不能是
Untitled-1这类未命名标签页——它没有有效 URI,VSCode 拒绝识别 - 若比对后显示大量空行差异或中文乱码,先看右下角:两边
UTF-8和CRLF/LF必须一致
diffEditor.ignoreTrimWhitespace 默认开启导致缩进变化不显示
VSCode 默认忽略行首尾空格、制表符、换行符差异,这不是 bug,是设计上优先聚焦逻辑变更。但当你检查格式错误、Prettier 输出差异、或末尾空格误删时,这就成了盲区。
- 点 Diff 视图右上角
⋯→ 取消勾选Ignore Trimmed Whitespace,此时空格显示为浅灰小点,\t和\n差异也会标出 - 该开关只影响当前 Diff 标签页,不影响其他已打开窗口
- 如需全局生效,改设置
diffEditor.ignoreTrimWhitespace为false,但已有 Diff 窗口不会刷新,必须重启对比 - 注意:关掉后大文件可能变卡,尤其含千行空格的 Markdown 或 HTML
Git 历史 Diff 卡在 “Loading…” 的真实原因
不是 VSCode 卡,而是 Git 层读取失败。VSCode 的 Git Diff 是封装 git show 或 git diff,底层不通,上层就只能转圈。
- 先确认项目根目录有
.git文件夹,且 VSCode 是从该目录或子目录启动的(否则 Git 扩展找不到仓库) - 终端执行
git show HEAD:src/utils.js,看能否正常输出内容;若报错或乱码,VSCode 就没法渲染 - 被
.gitignore匹配的文件不会出现在历史 Diff 列表中,右键菜单直接消失 - 二进制文件(图片、PDF、压缩包)只显示
Binary files differ,无法展开文本差异
Diff 视图里所有“接受变更”“复制某侧内容”操作,都只作用于当前 Diff 缓冲区,不会自动写回磁盘文件——你得手动保存右侧编辑结果,或回到原始文件再改。这点容易被忽略,尤其当右边是 Git 提交版本(只读)时,误以为点了 ✓ 就同步了。











