跳转至

Delta Git Diff 美化

为什么要学 Delta

Delta 是一个语法高亮的 diff 查看工具,用 Rust 编写。它可以替代 Git 默认的 diff 输出,提供带行号、语法高亮、并排视图和主题的美观差异展示。集成到 Git 后,所有 git diffgit loggit 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        # 语法高亮

导航

设置 navigate = true 后:
  n    下一个 diff 块
  N    上一个 diff 块
  q    退出

并排视图

# 临时启用
git diff --color | delta --side-by-side

# 永久设置
git config --global delta.side-by-side true

进阶用法

完整配置示例

# ~/.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
[delta]
    hyperlinks = true
    hyperlinks-file-link-format = "vscode://file/{path}:{line}"
    # 或 "idea://open?file={path}&line={line}"
    # 点击文件名可直接在编辑器中打开

常见问题

Q: 输出颜色不正确?

确保终端支持 24 位真彩色:

echo $TERM  # 应为 xterm-256color 或类似

Q: 并排视图太挤?

在宽屏终端中使用,或切换到行内模式:

git config --global delta.side-by-side false

Q: 如何临时禁用 delta?

git --no-pager diff
# 或
git diff | cat

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