diffnav:1243⭐的 Git diff 分页器,在终端里获得 GitHub 般的文件树体验

代码审查是开发流程中至关重要的一环。在 GitHub 网页端,我们可以方便地通过左侧文件树快速跳转不同文件,但在终端里查看 git diff 输出时,往往只能在冗长的滚动中寻找目标文件。diffnav 想解决这个问题——它基于广受欢迎的 delta 构建,为终端带来了 1243 stars 的 GitHub 式文件树体验。

项目概览

属性内容
GitHubdlvhdr/diffnav
Stars1243
语言Go
基础基于 delta
最后更新2026年4月

它解决了什么问题

在日常开发中,我们频繁需要在终端查看代码变更:

# 查看工作区变更
git diff

# 查看暂存区变更
git diff --staged

# 查看特定提交的变更
git show <commit>

但这些命令的输出是线性的——所有文件的改动按顺序排列。当变更涉及多个文件时,你需要不断滚动来定位目标文件,效率低下。

delta 是一个很好的解决方案,它为 diff 输出添加了语法高亮和更好的格式化,但依然缺少文件导航能力。

diffnav 的创新在于:在保持 delta 优秀渲染能力的同时,增加了一个可交互的文件树侧边栏,让你在终端里也能像 GitHub 网页端那样快速浏览和跳转。

核心特性

GitHub 风格的文件树

左侧文件树显示所有变更文件,支持:

  • 新增、修改、删除文件的不同图标标识
  • 文件名搜索过滤
  • 键盘快速导航(↑↓ 移动,Enter 跳转)
  • 文件变更统计(新增/删除行数)

基于 delta 的高质量渲染

继承了 delta 的所有优点:

  • 语法高亮支持多种编程语言
  • 行内变更高亮(word-level diff)
  • 行号显示
  • 文件标题和分隔线美化

键盘优先的交互设计

按键功能
↑/↓k/j在文件树中上下移动
Enter跳转到选中文件
q退出
/搜索文件名
Esc取消搜索

无需鼠标,完全键盘操作,符合终端用户的使用习惯。

安装与配置

Homebrew(推荐)

brew install dlvhdr/formulae/diffnav

从源码安装

git clone https://github.com/dlvhdr/diffnav.git
cd diffnav
go install .

配置为默认 diff 工具

编辑 ~/.gitconfig

[core]
    pager = diffnav

或者仅针对特定命令:

# 在 .bashrc 或 .zshrc 中添加
alias gd="git diff | diffnav"
alias gds="git diff --staged | diffnav"

字体要求

为了正确显示文件树中的图标,需要安装 Nerd Font

# macOS 示例
brew tap homebrew/cask-fonts
brew install --cask font-jetbrains-mono-nerd-font

然后在终端设置中使用该字体。

使用场景

代码审查前的自检

提交 PR 前,用 diffnav 快速浏览所有变更,确保没有遗漏调试代码或敏感信息:

git diff main...feature-branch | diffnav

Review 他人代码

在终端里 review 同事代码时,文件树让你快速定位关键文件:

gh pr checkout 123
git diff main...HEAD | diffnav

查看历史提交

回顾某个提交的具体改动:

git show <commit-hash> | diffnav

对比:diffnav vs delta vs 原生 git diff

特性原生 git diffdeltadiffnav
语法高亮
行内变更高亮
文件树导航
文件名搜索
启动速度⚡ 极快⚡ 快⚡ 快

如果你已经在使用 delta,diffnav 是自然而然的升级——它保留了 delta 的所有渲染优势,同时填补了导航能力的空白。

局限与注意事项

  • 依赖终端尺寸:文件树需要足够的终端宽度才能正常显示,建议全屏使用
  • Nerd Font 必需:不安装 Nerd Font 会导致图标显示为方框
  • 较新项目:1243 stars 说明还在成长阶段,功能相对专注,不如一些成熟工具全面
  • Go 生态:如果你不熟悉 Go 环境,从源码安装可能需要额外配置

总结

diffnav 是一个小而精的开发者工具,它没有试图重写 delta 的渲染逻辑,而是在其基础上增加了真正缺失的功能——文件树导航。这个设计选择非常明智:站在巨人肩膀上,解决特定问题。

对于那些经常在终端进行代码审查的开发者,diffnav 能显著提升效率。1243 stars 的背后是一个清晰的产品定位:让终端里的 diff 体验接近 GitHub 网页端

如果你也是 delta 用户,不妨尝试一下 diffnav,它可能会成为你 git 工具链中的新常驻成员。


属性内容
仓库https://github.com/dlvhdr/diffnav
许可证MIT
语言Go
维护者@dlvhdr