VSCode diff编辑器默认右侧只读,需开启inlineEdit或打开文件编辑;左侧始终不可编辑,调换比较顺序可解决方向错误。

VSCode 的 diff 编辑器默认不支持直接编辑右侧文件
VSCode 内置的差异视图(比如通过 git diff、比较两个文件或使用“选择性粘贴”触发的 Compare Active File With...)本质是只读预览。你看到的右侧(通常是“修改后”或“目标文件”)不能直接输入——光标点不进去,键盘敲不进内容。
这不是 bug,是设计限制:diff 视图定位在“对比”,不是“编辑”。想改右侧内容,得先打开对应文件本身。
常见错误现象:Cannot edit in read-only editor 报错弹出;或者点击右侧区域毫无响应,连光标都不显示。
解决路径只有两条:
- 把右侧文件单独用
File → Open File...或资源管理器双击打开,再编辑 - 用快捷键快速跳转:在 diff 视图中聚焦右侧面板(Tab 切换或鼠标点),按
Ctrl+Enter(Windows/Linux)或Cmd+Enter(macOS)——这会直接在新标签页中打开该文件并定位到当前行
如何让 diff 视图“可编辑”:必须启用“Inline Edit”模式
VSCode 1.86+ 引入了实验性功能 inlineEdit,它允许你在 diff 视图里直接修改右侧内容,并实时同步到源文件。但默认关闭,且需手动开启配置。
启用步骤:
- 打开设置(
Ctrl+,),搜索diffEditor.inlineEdit - 勾选
Diff Editor > Inline Edit - 重启 diff 视图(关掉再重新比较)
此时右侧会出现小铅笔图标,点击即可编辑;修改后按 Ctrl+S 保存,变更会写入原始文件。
注意点:
- 仅对“文件对比”和“工作区暂存区对比”生效,
git stash或git log中的 diff 不支持 - 编辑时无法撤销单步操作(
Ctrl+Z无效),只能靠保存前手动删改 - 若右侧文件被外部进程锁定(如被其他程序占用),保存会失败,报错
Unable to write file ... (Unknown (FileSystemError))
替代方案:用扩展实现更灵活的 diff 编辑
原生 inlineEdit 功能较基础,不支持批量应用 hunk、不显示冲突标记、也不能反向把右侧改写回左侧。真要高频做“基于 diff 修改”,推荐装扩展:
-
Compare Folders:支持双向编辑、hunk 级别 Accept/Reject、导出差异补丁 -
GitLens:在行内显示 commit 历史 diff,并允许从历史版本一键覆盖当前行(Revert Line to Commit)
例如用 GitLens:右键某一行 → GitLens: Revert Line to Commit → 选中某个旧版本 → 当前行立刻被替换成那个 commit 里的内容,相当于“从 diff 结果反向写回”。这比手动复制粘贴快得多,也避免误改邻近行。
性能影响很小,但多个 diff 标签同时开着 + 启用 GitLens 行内装饰,可能略微拖慢滚动响应——关掉 gitlens.hovers.enabled 可缓解。
为什么不能直接编辑左侧(原始文件)的 diff 视图?
左侧在 diff 视图里始终是只读的,无论是否开启 inlineEdit。这是 VSCode 的底层逻辑:左侧代表“基准”(base),右侧代表“变更”(changed)。所有编辑意图都被约束在“变更侧”。
所以如果你发现想改的是左侧文件,说明你搞反了比较方向。正确做法是调换顺序:
- 用命令面板(
Ctrl+Shift+P)运行Compare Active File With...,然后选你要对比的目标文件 - 或者右键资源管理器里的文件 A →
Select for Compare,再右键文件 B →Compare with Selected,确保 B 在右侧
否则你只能切出去单独开左侧文件改,没法利用 diff 上下文快速定位。
最容易被忽略的一点:diff 视图里按 F2 重命名文件、Delete 删除文件等操作,实际作用于**资源管理器中的原始文件条目**,和 diff 内容无关——它只是个快捷入口,不是沙盒环境。











