最可靠方式是用命令面板执行“File: Compare Active File With...”;拖拽对比不稳定,需先统一编码和换行符;插件可扩展功能但需注意权限与性能;灰色块表示被忽略的空白差异而非无变化。

用命令面板打开文件比较最可靠
VSCode 默认不绑定全局快捷键来对比任意两个文件,直接按 Ctrl+Shift+P(Windows/Linux)或 Cmd+Shift+P(macOS)唤出命令面板,输入 File: Compare Active File With... 是最稳的方式。它会列出当前已打开的文件供选择,也支持从资源管理器中右键选“Select for Compare”,再右键另一文件点“Compare with Selected”。别指望靠记忆组合键——没默认绑定,硬记反而容易误触发其他功能。
手动拖拽对比容易漏掉编码/换行差异
把一个文件拖到另一个标签页上松开,确实能触发对比,但这个操作依赖编辑器自动识别为“compare”,实际行为不稳定:如果两文件编码不同(比如一个是 UTF-8-BOM,一个是 UTF-8),或换行符不一致(CRLF vs LF),VSCode 可能只显示“无差异”或报错 Cannot compare files with different encodings。建议先统一格式:Ctrl+Shift+P → Change File Encoding 设为相同;再用 Ctrl+Shift+P → Change End of Line Sequence 统一为 LF。
扩展插件能补足原生限制但要注意权限
原生功能不支持同时对比三个及以上文件,也不支持忽略空格或注释。装 Compare Folders 或 Diff Checker 这类插件可解决,但注意:Diff Checker 会在右键菜单加 Compare with clipboard,而 Compare Folders 需要你手动指定路径,且对大文件(>10MB)响应慢。所有插件读取文件内容时都会申请 read 权限,如果处理敏感配置(如 .env 或 config.yml),建议关掉插件的自动扫描选项,改用右键显式触发。
对比结果里灰色块不是“没变化”,而是被忽略的行
启用 ignoreWhitespace 后,空白行、缩进变更会变灰,但很多人误以为那是“已合并”或“已忽略”。其实只是视觉隐藏——点击右上角齿轮图标,取消勾选 Ignore Whitespace 就能恢复显示。另外,如果某段代码在左侧有、右侧无,但没标红,大概率是启用了 ignoreTrimWhitespace(默认开启),此时末尾空格差异也被吞掉了。调试时建议先关掉所有 ignore 选项,确认逻辑差异后再按需开启。


















