Delta Git Diff 美化¶
为什么要学 Delta¶
Delta 是一个语法高亮的 diff 查看工具,用 Rust 编写。它可以替代 Git 默认的 diff 输出,提供带行号、语法高亮、并排视图和主题的美观差异展示。集成到 Git 后,所有 git diff、git log、git show 等命令的输出都会自动美化。对于每天都在看代码差异的开发者来说,Delta 能显著提升代码审查的效率和体验。
核心概念¶
| 概念 | 白话解释 | 用途 |
|---|---|---|
| Syntax Highlighting | 语法高亮 | diff 中的代码带颜色 |
| Line Numbers | 行号 | 显示原始和新文件的行号 |
| Side-by-side | 并排视图 | 左右对比显示差异 |
| Navigate | 导航 | 在 diff 块之间快速跳转 |
| Theme | 主题 | 颜色方案(与 bat 兼容) |
| Blame | 标注 | 美化 git blame 输出 |
安装配置¶
安装¶
# macOS
brew install git-delta
# Ubuntu/Debian
sudo apt install git-delta
# 或下载 .deb
wget https://github.com/dandavison/delta/releases/latest/download/git-delta_*_amd64.deb
sudo dpkg -i git-delta_*_amd64.deb
# Cargo
cargo install git-delta
Git 集成¶
# ~/.gitconfig
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
[delta]
navigate = true
side-by-side = false
line-numbers = true
syntax-theme = Catppuccin-mocha
[merge]
conflictstyle = diff3
[diff]
colorMoved = default
或通过命令设置¶
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global delta.line-numbers true
git config --global delta.side-by-side false
git config --global merge.conflictstyle diff3
git config --global diff.colorMoved default
快速上手¶
基本使用¶
# 设置后,Git 命令自动使用 delta
git diff # 美化的 diff 输出
git diff --staged # 暂存区差异
git log -p # 带 diff 的日志
git show HEAD # 美化的 commit 显示
git blame file.py # 美化的 blame
# 直接使用 delta
diff file1 file2 | delta
cat file.py | delta # 语法高亮
导航¶
并排视图¶
进阶用法¶
完整配置示例¶
# ~/.gitconfig
[delta]
navigate = true
line-numbers = true
side-by-side = false
# 主题
syntax-theme = Catppuccin-mocha
# 文件头部样式
file-style = bold yellow ul
file-decoration-style = none
# Hunk 头部
hunk-header-decoration-style = cyan box ul
hunk-header-style = file line-number syntax
# 行号样式
line-numbers-left-style = cyan
line-numbers-right-style = cyan
line-numbers-minus-style = red
line-numbers-plus-style = green
# 差异样式
minus-style = syntax "#3f0001"
minus-emph-style = syntax "#901011"
plus-style = syntax "#002800"
plus-emph-style = syntax "#006000"
# Blame
blame-format = "{author:<18} {commit:<8} {timestamp:<15}"
blame-palette = "#1e1e2e #181825 #11111b #313244"
# Merge 冲突
merge-conflict-begin-symbol = "▼"
merge-conflict-end-symbol = "▲"
merge-conflict-ours-diff-header-style = "bold yellow"
merge-conflict-theirs-diff-header-style = "bold cyan"
自定义主题¶
# 列出可用主题
delta --list-syntax-themes
# 预览主题
delta --syntax-theme="Dracula" < file.py
# 使用 bat 主题
bat --list-themes # delta 共用 bat 的主题
# 安装自定义主题
mkdir -p "$(bat --config-dir)/themes"
cd "$(bat --config-dir)/themes"
# 下载 .tmTheme 文件到此目录
bat cache --build
与其他工具集成¶
# 与 lazygit 集成
# lazygit config.yml
git:
paging:
colorArg: always
pager: delta --dark --paging=never
# 与 ripgrep 集成
rg --json pattern | delta
# 作为 diff 命令替代
# ~/.bashrc
alias diff='delta'
# 管道中使用
diff <(curl -s url1) <(curl -s url2) | delta
不同场景的配置¶
# 代码审查模式
[delta "review"]
side-by-side = true
line-numbers = true
navigate = true
# 终端窄屏模式
[delta "narrow"]
side-by-side = false
line-numbers = false
# 使用不同配置
# GIT_CONFIG_COUNT=1 GIT_CONFIG_KEY_0=delta.features GIT_CONFIG_VALUE_0=review git diff
Hyperlinks¶
[delta]
hyperlinks = true
hyperlinks-file-link-format = "vscode://file/{path}:{line}"
# 或 "idea://open?file={path}&line={line}"
# 点击文件名可直接在编辑器中打开
常见问题¶
Q: 输出颜色不正确?¶
确保终端支持 24 位真彩色:
Q: 并排视图太挤?¶
在宽屏终端中使用,或切换到行内模式:
Q: 如何临时禁用 delta?¶
Q: 与 diff-so-fancy 相比?¶
- Delta:语法高亮更强、行号支持、并排视图、Rust 性能
- diff-so-fancy:更轻量、配置简单、但功能较少
参考资源¶
- GitHub:https://github.com/dandavison/delta
- 文档:https://dandavison.github.io/delta/
- 主题预览:https://dandavison.github.io/delta/choosing-a-theme.html
- 配置参考:https://dandavison.github.io/delta/configuration.html