delta : un visualiseur de diff git avec coloration syntaxique

Le diff git par défaut est fonctionnel mais brut : rouge pour le supprimé, vert pour l’ajouté, sans coloration du code lui-même. delta ajoute la coloration syntaxique, met en évidence les mots précis qui ont changé dans une ligne, et propose une vue côte à côte optionnelle. Configurable via .gitconfig, il s’intègre transparemment à toutes les commandes git.

Ce que fait delta

delta (dandavison/delta) est un pager de diff écrit en Rust. Il remplace le visualiseur par défaut de git diff, git show, git log -p, et git stash show. Il utilise les mêmes grammaires syntaxiques que bat pour la coloration, et détecte automatiquement le langage des fichiers modifiés.

Installation

# macOS
brew install git-delta

# Windows (Winget)
winget install dandavison.delta

# Debian / Ubuntu
sudo apt install git-delta

# Arch Linux
sudo pacman -S git-delta

# Cargo
cargo install git-delta

Configuration dans .gitconfig

Une fois installé, ajoutez dans votre ~/.gitconfig :

[core]
    pager = delta

[interactive]
    diffFilter = delta --color-only

[delta]
    navigate = true        # n/N pour naviguer entre les fichiers dans le diff
    side-by-side = false   # vue côte à côte (true pour activer)
    line-numbers = true    # numéros de ligne
    syntax-theme = Dracula # thème de coloration

[merge]
    conflictstyle = diff3

[diff]
    colorMoved = default

Après cette configuration, git diff, git show, git log -p utilisent automatiquement delta.

Coloration syntaxique par langage

delta détecte le langage du fichier modifié depuis l’en-tête du diff :

diff --git a/src/api.ts b/src/api.ts

Et applique la coloration TypeScript, Python, Rust, SQL, YAML, etc. selon le fichier. Les mots-clés, chaînes, commentaires et types sont colorés dans le contexte du diff.

Mise en évidence des mots modifiés

La fonctionnalité la plus utile : delta met en évidence les mots précis qui ont changé dans une ligne modifiée, pas seulement la ligne entière.

# Sans delta :
- const timeout = 5000;
+ const timeout = 10000;

# Avec delta (les chiffres seuls sont surlignés) :
- const timeout = [5000];
+ const timeout = [10000];

Permet de repérer instantanément ce qui a vraiment changé dans une longue ligne.

Vue côte à côte

[delta]
    side-by-side = true
──────────── avant ────────────  │  ──────────── après ────────────
  1  │ export async function     │    1  │ export async function
  2  │ getUser(id: number) {     │    2  │ getUser(id: string) {
  3  │   return db.users         │    3  │   return db.users
  4  │     .findById(id);        │    4  │     .findOne({ id });
  5  │ }                         │    5  │ }

En vue côte à côte, delta affiche l’ancien et le nouveau code en colonnes. Utile pour les revues de code sur un grand écran.

Avec navigate = true, utilisez n et N dans le pager pour sauter entre les fichiers modifiés :

git diff HEAD~5       # diff des 5 derniers commits
# n → fichier suivant
# N → fichier précédent
# / → recherche dans le diff
# q → quitter

Thèmes

# Lister les thèmes disponibles
delta --list-syntax-themes

# Aperçu d'un thème
git diff | delta --syntax-theme=Nord

Thèmes populaires : Dracula, gruvbox-dark, Nord, OneHalfDark, GitHub, ansi.

Pour un terminal à fond clair :

[delta]
    light = true
    syntax-theme = GitHub

Conflits de fusion

delta améliore aussi l’affichage des conflits de fusion (conflictstyle = diff3 requis) :

[merge]
    conflictstyle = diff3

Les sections <<<<<<, =======, >>>>>>> sont colorées différemment, avec l’ancêtre commun visible (diff3).

Intégration avec d’autres outils

git log

git log -p --follow src/api.ts
# delta affiche chaque commit avec coloration syntaxique

git stash

git stash show -p stash@{0}
# delta affiche le stash avec coloration

git blame (via tig ou lazygit)

delta s’intègre automatiquement dans les outils qui utilisent la configuration git (tig, lazygit, gitui).

Diff de fichiers quelconques

# Comparer deux fichiers sans git
delta fichier-ancien.py fichier-nouveau.py

# Depuis stdin
diff -u old.json new.json | delta

Configuration avancée

[delta]
    # Largeur de la vue côte à côte
    width = 200

    # Couleurs personnalisées
    minus-style                   = syntax "#3f0001"
    plus-style                    = syntax "#003800"
    minus-emph-style              = syntax bold "#901011"
    plus-emph-style               = syntax bold "#006000"

    # En-tête de fichier stylisé
    file-style                    = bold yellow ul
    file-decoration-style         = none
    hunk-header-decoration-style  = blue box

    # Numéros de ligne
    line-numbers-left-format      = "{nm:>4} │"
    line-numbers-right-format     = "{np:>4} │"

+ Les points forts

  • Coloration syntaxique dans les diffs — lit du code dans un diff devient aussi agréable qu’avec un éditeur
  • Mise en évidence au niveau du mot — identifie immédiatement ce qui a changé dans une ligne
  • Zéro friction — une configuration dans .gitconfig et delta s’intègre à toutes les commandes git existantes
  • Vue côte à côte — idéale pour les revues de code sur grand écran
  • Navigation intégréen/N pour parcourir les fichiers dans un diff long
  • Rapide — Rust, aucune latence perceptible

- Les points faibles

  • Terminal large recommandé — la vue côte à côte nécessite au moins 160 colonnes pour être confortable
  • Pas d’interface TUI — delta est un pager, pas un outil interactif. Pour la navigation avancée, lazygit ou tig complètent mieux
  • Configuration requise — sans modifier .gitconfig, delta n’est pas utilisé automatiquement

delta vs diff-so-fancy vs difftastic

deltadiff-so-fancydifftastic
Coloration syntaxique
Niveau du motPartiel✅ (AST)
Vue côte à côte
Vitesse⚡⚡⚡⚡⚡⚡ (lent sur gros fichiers)
Configuration.gitconfig.gitconfig.gitconfig

difftastic analyse la syntaxe (AST) pour un diff sémantique plus précis mais est beaucoup plus lent. delta reste le meilleur compromis vitesse/lisibilité.

En résumé

delta est la modification .gitconfig la plus impactante pour la lisibilité du code au quotidien. Cinq lignes de configuration transforment git diff d’un flux de texte brut en une vue colorée, structurée, navigable. Indispensable pour tout développeur qui lit des diffs fréquemment.


Voir aussi :

  • lazygit — TUI git qui utilise automatiquement delta pour les diffs
  • bat — même moteur de coloration syntaxique appliqué aux fichiers
  • git worktree — comparer des branches en parallèle avec delta