vscode自带文件对比功能完全够用,无需插件或外部工具;触发方式有三:多选文件后右键“compare with selected”、编辑器标签页右键“compare with saved”(仅限未保存修改)、命令面板执行“file: compare active file with”最可靠;注意编码、换行符需一致,否则显示假差异。

VSCode 自带的文件对比功能完全够用,不用装插件、不依赖外部工具——但必须搞清“谁是基准”和“怎么触发”,否则点半天也没反应。
为什么右键菜单里找不到 Compare 选项
资源管理器中右键单个文件,确实看不到 Compare 相关菜单项。这不是 bug,是设计限制:
- 只有按住
Ctrl(Windows/Linux)或Cmd(macOS)多选两个文件后,右键任一文件才会出现Compare with Selected - 如果只选了一个文件,右键只有
Select for Compare;必须再右键第二个文件,选Compare with Selected才生效 - 编辑器标签页右键也有限制:只有当前文件未保存修改时,才显示
Compare with Saved,其他情况灰掉
命令面板是最稳的触发方式
不管文件是否已打开、是否在工作区、路径是否跨盘,只要执行对了,100% 能进 Diff 视图:
- 先在编辑器中打开一个文件(比如
config.json),确保它处于焦点状态(tab 是高亮的) - 按
Ctrl+Shift+P(Windows/Linux)或Cmd+Shift+P(macOS)呼出命令面板 - 输入
File: Compare Active File With,回车 - 在弹出的文件选择器中点选另一个文件(支持跨目录、跨工作区)
注意:Compare Active File With 命令会灰掉,99% 是因为没打开任何文件,或当前焦点不在编辑器内(比如在终端或设置页)。
拖拽能快,但位置和状态卡得很死
想省键盘?可以拖,但容错率极低:
- 必须从左侧
EXPLORER面板里拖第二个文件,拖到第一个文件的 标签栏右侧边缘(不是代码区、不是空白编辑区) - 拖之前,务必点一下第一个文件的 tab,让它激活;否则拖了也没反应
- 拖错位置(比如拖进代码区)会直接替换内容,不是对比——这是新手最常误操作的地方
- 从系统文件管理器(如 Finder / 文件资源管理器)拖入,只会新开标签页,不会触发 Diff
对比出来全是乱码或空行差异,怎么办
不是 VSCode 比错了,是底层编码或换行符不一致:
- 看右下角状态栏:如果一边显示
UTF-8 BOM,另一边是UTF-8,就必然满屏假差异;点击它统一成同一种编码 - 换行符也要对齐:一边是
CRLF(Windows),一边是LF(Unix/macOS),会导致整行偏移;点击右下角的CRLF/LF切换即可 - 别手动删空行“对齐”——VSCode 的 diff 是基于行哈希计算的,空行本身就是有效差异源
- 如果用了 Prettier 等格式化插件,建议临时禁用再对比,否则格式化引入的空行/缩进变化全算作差异
真正麻烦的是超大文件(>50MB)或含大量不可见字符的二进制配置,VSCode 会卡顿甚至无响应。这种时候,老实用终端跑 diff -u file1 file2 更靠谱。











