Zed 推出Split Diff :比 VSCode 更快、更稳、更智能的Git体验!

1 阅读4分钟

Zed Split Diffs

从 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 在正常工作,需要解决两个硬核问题

  1. 性能:保持分栏视图在大型 Diff 中足够快
  2. 对齐:在每次击键时保持两侧同步

解决方案 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"
}

为什么这很重要?

对开发者的意义

  1. 更快的代码审查

    • 一眼看到所有更改
    • 无需在文件间切换
    • 保持上下文不丢失
  2. 更少的错误

    • 两侧始终对齐
    • 不会错过更改
    • 视觉一致性
  3. 更好的体验

    • 编辑时不会失步
    • 大型项目依然流畅
    • 直觉化的操作

对团队的意义

代码审查效率提升

  • 审查者可以专注于代码,而不是工具
  • 大型 PR 不再可怕
  • 跨文件重构更容易理解

总结

Zed 的分栏 Diff 不是简单的功能添加,而是架构优势的体现

:大型更改集依然流畅
:编辑时保持完美对齐
智能:Multibuffer 体验的自然延伸

这不是 VSCode 的复制品,这是下一代 Diff 视图。