从 Zed v0.224 开始,分栏 Diff(Split Diffs)成为默认视图。左侧显示基础版本,右侧显示你的修改,两侧同步滚动、实时对齐。这是 2025 年 Git 集成发布后用户最期待的功能。
为什么分栏 Diff 这么重要?
分栏 Diff 视图是代码审查的标配功能,但做得好和能用是两码事。
当这个功能构建得当时,它应该是直觉化的、无缝的。但我们知道,这种"直觉化"的感觉来之不易。Zed 的分栏 Diff 视图必须匹配编辑器的整体风格:快速、极简、精心打造。
Zed 的 Diff 与众不同
构建这个新视图特别棘手,因为 Zed 的 Diff 不是孤立的文件-by-文件视图。
Multibuffer:Zed 的核心创新
Zed 的 Diff 构建在 multibuffers(多缓冲区) 之上——这是一个跨越多文件的单一可编辑表面。
这意味着我们在设计分栏 Diff 时,必须应对其他编辑器不需要面对的挑战:
在 Zed 中,你可以:
- ✅ 在文件之间无缝移动光标
- ✅ 选择跨越文件边界的文本
- ✅ 像正常文本一样导航删除的区域
传统编辑器:文件 A 的 Diff | 文件 B 的 Diff | 文件 C 的 Diff
Zed: 所有文件的统一 Diff 视图(multibuffer)
项目级 Diff
Zed 的项目 Diff(Project Diff)支持一次性显示所有更改的文件,全部在一个 multibuffer 中。
这意味着分栏 Diff 视图必须优雅地扩展。而且由于 multibuffer 的统一性质,单个对齐错误可能级联到整个 Diff。
技术实现:两大核心难题
要让分栏 Diff 在正常工作,需要解决两个硬核问题:
- 性能:保持分栏视图在大型 Diff 中足够快
- 对齐:在每次击键时保持两侧同步
解决方案 1:在 Block Map 中建模对齐
分栏 Diff 视图看起来像一个 multibuffer,但在底层实际上是两个。
左侧建模的演进
zed最后确定了一种简单而优雅的解决方案:
// 核心思路
左侧 = 旧版本文件 + 红色高亮删除部分
右侧 = 新版本文件 + 绿色高亮新增部分
这个模型的优势:
-
右侧的每个文件,左侧都有一个对应文件
-
可以重用语法树和行号,无需修改
-
更贴近用户期望,减少了大量边缘情况的修补工作
解决方案 2:保持极速
Block Map 设计为在每次击键时重新计算块装饰的位置,并且它在 multibuffer 中的所有文件之间共享。
性能敏感性:
- 添加垫片给 Block Map 增加了更多负担
- 我们必须优化性能,让 Zed 的 Diff 能扩展到数千个更改的文件
- 即使是最小的卡顿,反复出现也会让你抓狂
启用分栏 Diff
分栏 Diff 在今天的稳定版中已可用,并且是新的默认设置。
打开方式:
打开项目 Diff 或分支 Diff
→ 自动显示分栏视图
切换回统一 Diff
如果你更喜欢传统的统一 Diff 视图:
// settings.json
{
"diff_view_style": "unified"
}
为什么这很重要?
对开发者的意义
-
更快的代码审查
- 一眼看到所有更改
- 无需在文件间切换
- 保持上下文不丢失
-
更少的错误
- 两侧始终对齐
- 不会错过更改
- 视觉一致性
-
更好的体验
- 编辑时不会失步
- 大型项目依然流畅
- 直觉化的操作
对团队的意义
代码审查效率提升:
- 审查者可以专注于代码,而不是工具
- 大型 PR 不再可怕
- 跨文件重构更容易理解
总结
Zed 的分栏 Diff 不是简单的功能添加,而是架构优势的体现:
✅ 快:大型更改集依然流畅
✅ 稳:编辑时保持完美对齐
✅ 智能:Multibuffer 体验的自然延伸
这不是 VSCode 的复制品,这是下一代 Diff 视图。