Ctrl+Shift+D 打不开差异视图,因其默认绑定 SCM 面板而非 diff 编辑器;需右键选 Compare with Saved 或用 Compare Files 命令触发可编辑差异界面。

VSCode 为什么按 Ctrl+Shift+D 打不开差异视图?
不是所有文件都能直接进差异编辑——只有在「已暂存」或「工作区有修改」的前提下,右键文件选择 Compare with Saved 或用命令面板运行 File: Compare Active File With... 才会触发可编辑的差异界面。单纯打开两个文件并排,只是普通双窗格,Ctrl+Shift+D 默认绑定的是 workbench.view.scm(源代码管理面板),不是差异视图。
- 确认当前文件已被 Git 跟踪且存在未提交修改;否则右键菜单里压根不会出现
Compare with Saved - 如果想对比任意两个文件(比如本地两个 JSON),得先用命令面板(
Ctrl+Shift+P)搜Compare Files,选中两个文件后才进入可编辑差异模式 -
Ctrl+Shift+D是 SCM 面板快捷键,不是 diff 编辑器快捷键;真正唤出差异编辑器的常用路径是右键 →Compare with Saved,或使用Ctrl+K Ctrl+D(默认绑定为workbench.action.compareEditor.focusOtherSide,但前提是已在 diff 编辑器中)
在差异视图里改了左边/右边文件,保存后到底写回哪边?
差异编辑器默认是「单向可编辑」:左侧(通常是 HEAD 或暂存区版本)只读,右侧(Working Tree)可编辑。你改的是右边,Ctrl+S 保存的就是当前工作区文件,不会覆盖左侧历史版本。
- 如果你看到两侧都可编辑(比如对比两个本地文件),那说明你没走 Git 流程,而是用了
Compare Files命令——此时保存行为取决于焦点在哪个面板:聚焦左面板按Ctrl+S就写入左边文件,聚焦右面板就写入右边文件 - Git 差异视图中,左侧标题通常带
(HEAD)或(index)标识,右侧是(Working Tree),这是判断编辑目标的关键视觉线索 - 误操作改了只读侧?VSCode 会弹提示「Cannot edit in read-only editor」,但不会静默失败
如何让差异编辑器支持语法高亮和格式化?
VSCode 默认根据文件扩展名识别语言,但差异编辑器里左右两边可能被识别成 plaintext,尤其对比非标准后缀(如 .conf、.env)或无后缀文件时。
- 把光标放在要设置语言的面板,按
Ctrl+Shift+P输入Change Language Mode,手动选对应语言(比如JSON、YAML) - 改完后右下角状态栏会显示当前语言,此时格式化(
Shift+Alt+F)和括号匹配、错误提示才会生效 - 这个设置仅对当前 diff 会话有效;下次再开同样对比,仍需重设——VSCode 不持久化 diff 编辑器的语言偏好
保存差异修改后,Git 状态没更新?
保存右侧(Working Tree)后,文件内容确实变了,但 VSCode 的源代码管理面板有时不会实时刷新状态图标(比如 ❌ 变成 ✔️),尤其在大仓库或开启 git.untrackedFiles 为 hidden 时。
- 手动点 SCM 面板右上角刷新按钮(↻),或按
Ctrl+Shift+P运行Git: Refresh - 检查终端里
git status输出是否真实反映了变更;VSCode 的 UI 状态偶尔滞后,但 Git 底层是准的 - 如果改完保存却提示「No changes to commit」,大概率是文件没被 Git 跟踪(
git add -N可预注册新文件),或当前分支不在工作区根目录下(比如在子文件夹打开 VSCode,而 .git 在上级)
git status。


















