TL;DR

delta é pager especializado em git diff/show/log/blame, com syntax highlight (syntect, igual bat), side-by-side opcional, navegação por keys (n/N entre hunks), hyperlinks OSC 8 (terminais modernos), preservação de cores. Configurado no ~/.gitconfig. Standalone funciona em diff puro também (diff -u a b | delta). Ao adotar, o ganho é transformar git diff de cinza/preto em revisão visual com syntax highlight e navegação.

O que é / Como funciona

Filosofia: pager especializado pra git

delta não é pager genérico — é uma reformatação visual do output de git diff (e affins). Engine syntect (mesma do bat) aplica syntax highlight em ~150 linguagens. Recebe diff unified como input, devolve diff reformatado pro terminal.

Compatível com qualquer comando git que produza diff:

  • git diff
  • git show <hash>
  • git log -p
  • git blame
  • git stash show -p

Também funciona em diff fora do git: diff -u a.txt b.txt | delta.

Features (todas opcionais, ativadas no config)

  • navigaten e N pulam entre hunks; útil em diff grande
  • side-by-side — antes/depois lado a lado (precisa terminal largo)
  • line-numbers — numeração nas duas colunas
  • hyperlinks — OSC 8 escape sequences viram commits/paths clicáveis em terminais que suportam
  • syntax-theme — tema syntax (compartilha temas bat, via bat --list-themes)
  • features — preset combinado (decorations agrupa file/hunk headers visuais)
  • dark / light — escolha de tema; sem isso, delta tenta auto-detectar

Config em gitconfig

[core]
    pager = delta
 
[interactive]
    diffFilter = delta --color-only
 
[delta]
    navigate = true
    light = false
    side-by-side = true
    line-numbers = true
    syntax-theme = Dracula
    hyperlinks = true
    features = decorations
 
[merge]
    conflictStyle = diff3
 
[diff]
    colorMoved = default

[interactive] diffFilter — afeta git add -p

Sem essa key: git add -p (patch interativo) usa pager default (cru). Com essa key: os chunks que aparecem em git add -p ficam coloridos pelo delta.

Modo standalone

diff -u a.txt b.txt | delta
# Funciona pra qualquer diff unified, fora do git

Terminais com suporte: kitty, wezterm, recent gnome-terminal (3.40+), recent iTerm. Em terminais sem suporte, hyperlinks viram texto literal ]8;;file://... — pode ficar feio.

Em delta:

  • Commit hashes viram links pra hosting provider (GitHub/GitLab)
  • File paths viram links que abrem no editor configurado

Na prática

Setup inicial

# Configurar gitconfig global
git config --global core.pager delta
git config --global interactive.diffFilter "delta --color-only"
git config --global delta.navigate true
git config --global delta.side-by-side true
git config --global delta.line-numbers true
git config --global delta.syntax-theme "Dracula"
 
# Verificar
git diff HEAD~1

Receitas

# Diff comum
git diff
git diff HEAD~5
 
# Show de commit
git show <hash>
 
# Log com diffs (cuidado com volume)
git log -p --max-count=3
 
# Standalone (sem git)
diff -u file_a file_b | delta
 
# Comparar dois branches lado a lado
git diff main..feature -- src/
 
# Diff em formato específico, encanado pra delta
diff -u /etc/hosts.bak /etc/hosts | delta

Integrar com bat themes

# Listar themes (engine compartilhada com bat)
bat --list-themes
 
# Configurar tema escolhido no gitconfig
git config --global delta.syntax-theme "Monokai Extended"

Mesmos themes funcionam em bat e delta (port syntect do Sublime grammars).

Comparação: delta vs alternativas

PagerSyntax highlightSide-by-sideNavegaçãoHyperlinks
less (default git)nãonãolimitadanão
diff-so-fancynãonãolimitadanão
deltasimsimn/NOSC 8

Versão hedged

delta 0.19+; verifique delta --version localmente.

Armadilhas

(1) Config errada no gitconfig é silenciosa

Causa: typo em [delta] section ou key — delta não roda e git cai pra less default, sem mensagem de erro.

Sintoma: git diff aparece sem syntax (listras vermelhas/verdes só).

Como detectar: git config --get core.pager mostra delta? delta --version está instalado?

Solução: copiar config do README oficial; testar com git diff HEAD~1 em repo conhecido. Se falhar, isolar com git -c core.pager=delta diff (força delta inline). Validar config YAML/TOML com tool ou eyeballing.

(2) Side-by-side em terminal estreito

Causa: side-by-side = true precisa ~180 colunas efetivas; em terminal de 100 colunas, fica cortado.

Sintoma: linhas truncadas; pior que single-column em UX.

Como detectar: tput cols mostra largura atual.

Solução: condicional por contexto — só side-by-side em monitor wide. Ou deixar false global e ativar caso a caso: git -c delta.side-by-side=true diff.

Causa: terminal antigo (gnome-terminal pré-3.40, alacritty antigo, GNU screen) não interpreta sequência OSC 8.

Sintoma:]8;;file://...^G literal no diff.

Como detectar: ler diff e ver texto estranho onde deveria ter link clicável.

Solução: desativar em terminais sem suporte: [delta] hyperlinks = false. Detectar terminal via $TERM, $TERM_PROGRAM.

(4) Performance em diff gigante

Causa: delta aplica highlight + reformatação por linha; em diff de milhares de linhas, o custo soma.

Sintoma: git log -p em repo grande lento; git show de commit gigante demorado.

Como detectar: comparar git --no-pager log -p (rápido) vs git log -p (lento).

Solução: [delta] max-line-length = 512 (linhas mais longas viram cru); ou usar pager raw temporário: git --no-pager diff.

(5) Conflito com outras configs de pager

Causa: [pager] section no gitconfig tem entries customizadas (pager.diff = something); sobrescrevem core.pager.

Sintoma: git diff usa pager X; git show usa pager Y; comportamento inconsistente.

Como detectar: git config --get-all pager.* lista overrides.

Solução: garantir core.pager = delta E [pager] diff = delta, log = delta, show = delta consistentes. Ou remover overrides específicos.

(6) colorMoved em diff conflita com tema delta

Causa: [diff] colorMoved = zebra ou dimmed-zebra colore linhas movidas com cores próprias que conflitam com tema delta.

Sintoma: linhas movidas em cor estranha (ex: magenta sobre azul) — ilegível.

Como detectar: diff com refactor (linhas movidas) usando tema escuro mostra cores feias.

Solução: ajustar [delta] map-styles pra remapear cores conflitantes; ou usar colorMoved = default (delta lida bem com o default).

Em inglês

  • Pagerpager. “delta é o pager especializado pra git diff.”
  • Syntax highlightsyntax highlighting. “syntect aplica syntax highlight em ~150 linguagens.”
  • Lado a ladoside-by-side. “Side-by-side compara antes/depois em duas colunas.”
  • Hyperlinkhyperlink. “Hyperlinks OSC 8 viram links clicáveis em terminais compatíveis.”
  • Sequência de escapeescape sequence. “OSC 8 é uma sequência de escape ANSI.”
  • Navegaçãonavigation. “Navegação por n/N entre hunks dispensa scroll manual.”
  • Hunkhunk. “Cada hunk é um bloco contíguo de mudanças no diff.”
  • Decoraçãodecoration. “Features de decoração agrupam headers visuais.”
  • Tematheme. “O tema syntax compartilha grammars com o bat.”
  • Detecção de refactorrefactor detection. “colorMoved ajuda na detecção de refactor (linhas movidas).”

Veja também

Referências