VSCode内置Diff工具需正确触发:用Ctrl+K D(或Cmd+K D)、Alt/Option单击、拖拽并选“Compare with…”;vscode.diff命令支持自定义快捷键但要求文件已打开;Diff视图支持行号跳转、Ctrl+.切换上下文、右键接受变更;对比未保存更改应使用源码管理视图的“Compare with Saved”;注意编码、换行符、BOM会导致误标差异。

VSCode 内置的 Diff 工具足够好用,但默认行为容易让人误以为“没反应”或“对比不全”——关键在于触发方式和视图状态是否匹配。
如何正确打开两个文件的 Diff 视图
不是所有打开方式都能进 Diff 模式。最可靠的是通过命令面板或拖拽对比:
- 先打开第一个文件,再按
Ctrl+K(Windows/Linux)或Cmd+K(macOS),松开后立刻按D,此时光标会变成十字,点击第二个文件即可启动双向 Diff - 在资源管理器中,按住
Alt(Windows/Linux)或Option(macOS),再单击第二个文件,也会触发 Diff - 直接拖一个未打开的文件到已打开的编辑器标签页上,VSCode 会提示“Compare with…”——选中目标文件即可
- 如果右键菜单里没有 “Select for Compare”,说明当前文件尚未被 VSCode 认为是“可比对象”(比如刚新建未保存的临时文件)
vscode.diff 命令与自定义快捷键
VSCode 的 Diff 功能底层调用的是 vscode.diff 命令,它接受三个参数:original、modified 和可选的 title。你可以在 keybindings.json 中绑定更顺手的组合:
[
{
"key": "ctrl+shift+d",
"command": "vscode.diff",
"args": {
"original": "${file}",
"modified": "${relativeFile}"
}
}
]
注意:${relativeFile} 必须是当前工作区中已打开的另一个文件路径;若未打开,命令会静默失败,不会报错也不会弹窗。
Diff 视图里容易忽略的交互细节
Diff 窗口看似静态,实则支持多种快速操作:
- 点击左侧或右侧的行号区域(非代码行本身),可以跳转到对应原始文件的编辑位置
- 按
Ctrl+.(Windows/Linux)或Cmd+.(macOS)可快速在“仅显示差异”和“显示全部上下文”之间切换 - 右键差异块,有 “Accept Current Change” 和 “Accept All Changes” —— 这些操作只影响右侧文件(即
modified),不会自动保存,需手动Ctrl+S - 如果 Diff 视图中某侧显示 “Unable to open ‘xxx’: File not found”,说明该路径已失效(如文件被重命名或移出工作区),需重新触发对比
对比未保存的更改(Working Changes)与磁盘版本
这是最常用却最容易混淆的场景:当前编辑的文件 vs 它上次保存的状态。这时不要用文件对比,而应使用源码管理视图:
- 打开源码管理侧边栏(
Ctrl+Shift+G),找到已修改的文件,点击其右侧的...→ “Compare with Saved” - 或者直接在编辑器右上角点击 “Changes” 标签旁的齿轮图标,选择 “Show Differences”
- 这个对比走的是
git diff或文件系统快照机制,和双文件 Diff 不是同一套逻辑——所以不能用vscode.diff命令模拟 - 若文件从未保存过(即没有磁盘副本),VSCode 会对比空内容,此时 Diff 视图只显示“全部为新增”
Diff 的核心限制在于:它只做文本行级比对,不理解语义;一旦文件编码不一致(如 UTF-8 vs GBK)、换行符混用(CRLF/LF),或某侧含不可见 BOM,就可能整块标红。这类问题不会报错,只会让你怀疑“是不是工具坏了”。










