diffnav:1243⭐的 Git diff 分页器,在终端里获得 GitHub 般的文件树体验
diffnav:1243⭐的 Git diff 分页器,在终端里获得 GitHub 般的文件树体验
代码审查是开发流程中至关重要的一环。在 GitHub 网页端,我们可以方便地通过左侧文件树快速跳转不同文件,但在终端里查看 git diff 输出时,往往只能在冗长的滚动中寻找目标文件。diffnav 想解决这个问题——它基于广受欢迎的 delta 构建,为终端带来了 1243 stars 的 GitHub 式文件树体验。
项目概览
| 属性 | 内容 |
|---|---|
| GitHub | dlvhdr/diffnav |
| Stars | 1243 |
| 语言 | 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 diff | delta | diffnav |
|---|---|---|---|
| 语法高亮 | ❌ | ✅ | ✅ |
| 行内变更高亮 | ❌ | ✅ | ✅ |
| 文件树导航 | ❌ | ❌ | ✅ |
| 文件名搜索 | ❌ | ❌ | ✅ |
| 启动速度 | ⚡ 极快 | ⚡ 快 | ⚡ 快 |
如果你已经在使用 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 |