bat : le remplacement moderne de cat avec coloration syntaxique

cat existe depuis 1971. Il affiche le contenu d’un fichier, sans mise en forme, sans contexte. bat fait la même chose, mais avec la coloration syntaxique, les numéros de ligne, les modifications git en marge, et un pager intégré. Une fois installé, on ne revient pas en arrière.

Ce que fait bat

bat (sharkdp/bat) est un clone de cat écrit en Rust. Il supporte plus de 200 langages, s’intègre avec git pour afficher les lignes modifiées, et utilise less comme pager automatiquement quand le fichier dépasse la hauteur du terminal.

# Afficher un fichier avec coloration
bat src/config.ts

# Plusieurs fichiers à la suite
bat src/*.ts

# Avec numéros de ligne explicites
bat -n Makefile

# Sans décoration (compatible avec les pipes)
bat -p src/main.py | grep "def "

Installation

# macOS
brew install bat

# Windows (Winget)
winget install sharkdp.bat

# Debian / Ubuntu
sudo apt install bat
# Note : la commande s'appelle batcat sur Ubuntu, créez un alias :
mkdir -p ~/.local/bin && ln -s /usr/bin/batcat ~/.local/bin/bat

# Arch Linux
sudo pacman -S bat

# Cargo (toutes plateformes)
cargo install bat

Intégration git

bat affiche en marge gauche les lignes ajoutées (+), modifiées (~) et supprimées selon l’état du dépôt git courant :

   1   │ import { defineConfig } from 'astro/config';
 ~ 2   │ import sitemap from '@astrojs/sitemap';
 + 3   │ import mdx from '@astrojs/mdx';
   4   │
   5   │ export default defineConfig({

Pour désactiver cette fonctionnalité : bat --style=plain.

Thèmes

bat intègre plusieurs thèmes de coloration. Pour les lister :

bat --list-themes

# Aperçu de tous les thèmes sur un fichier
bat --list-themes | fzf --preview="bat --theme={} --color=always src/main.js"

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

Pour définir un thème par défaut, ajoutez dans votre .bashrc ou .zshrc :

export BAT_THEME="Dracula"

Configuration persistante

bat lit un fichier de configuration dans ~/.config/bat/config (Linux/macOS) ou %APPDATA%\bat\config (Windows) :

--theme=Dracula
--style=numbers,changes,header
--italic-text=always

Les options disponibles pour --style :

ValeurEffet
numbersNuméros de ligne
changesMarqueurs git en marge
headerNom du fichier en en-tête
gridLignes de séparation
plainAucune décoration
fullTout activer

Intégration avec d’autres outils

Comme pager pour man

# Ajouter dans .bashrc / .zshrc
export MANPAGER="sh -c 'col -bx | bat -l man -p'"

Les pages man s’affichent avec coloration syntaxique.

Avec fzf pour la prévisualisation

# Prévisualisation colorée dans fzf
fzf --preview 'bat --color=always --style=numbers --line-range=:200 {}'

Alias drop-in

Pour remplacer cat de façon transparente :

alias cat='bat --paging=never'

--paging=never désactive le pager et reproduit le comportement exact de cat dans les scripts.

Avec git diff

# bat comme visualiseur de diff git (à combiner avec delta pour plus de puissance)
git diff | bat -l diff

Langages supportés

bat supporte plus de 200 langages : TypeScript, Python, Rust, Go, YAML, TOML, Dockerfile, SQL, GraphQL, Markdown, JSON, HCL, Nix, et bien d’autres.

# Lister tous les langages supportés
bat --list-languages

# Forcer un langage si l'extension n'est pas reconnue
bat --language=yaml fichier.conf
cat docker-compose.override | bat --language=yaml

Afficher des plages de lignes

# Lignes 10 à 30
bat -r 10:30 src/index.ts

# Depuis la ligne 50
bat -r 50: src/index.ts

# Les 20 premières lignes
bat -r :20 src/index.ts

+ Les points forts

  • Coloration syntaxique de qualité — basé sur les grammaires TextMate, le même moteur que de nombreux éditeurs
  • Intégration git native — les modifications en cours s’affichent sans configuration
  • Pager automatique — plus besoin de | less pour les longs fichiers
  • Compatible avec les pipes — en mode non-interactif, se comporte exactement comme cat
  • Rapide — écrit en Rust, aucune latence perceptible même sur de gros fichiers
  • Drop-in replacement — tous les scripts qui utilisent cat continuent de fonctionner

- Les points faibles

  • Pas de coloration sur certains formats propriétaires — les fichiers .log très spécifiques ou les formats internes ne sont pas toujours reconnus
  • Légèrement plus lent que cat sur de très gros fichiers — la coloration syntaxique a un coût, négligeable en pratique mais mesurable sur des fichiers de plusieurs centaines de Mo
  • La détection de langue peut rater — les fichiers sans extension ou avec des extensions ambiguës nécessitent --language= manuel

bat vs cat vs less

catlessbat
Coloration syntaxique
Numéros de ligne❌ (toggle)
Intégration git
Pagination auto
Compatible pipes
Vitesse⚡⚡⚡⚡⚡⚡⚡⚡

En résumé

bat s’installe en deux minutes et améliore immédiatement la lisibilité du terminal. Il n’y a aucune configuration nécessaire pour commencer — la coloration et les numéros de ligne fonctionnent dès la première utilisation. L’alias cat='bat --paging=never' est la modification la plus rentable que vous puissiez faire sur votre environnement de développement.


Voir aussi :

  • ripgrep — chercher dans les fichiers aussi vite que bat les affiche
  • fzf — naviguer et prévisualiser les fichiers de façon interactive
  • delta — le même niveau de coloration syntaxique appliqué aux diffs git