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 :
| Valeur | Effet |
|---|---|
numbers | Numéros de ligne |
changes | Marqueurs git en marge |
header | Nom du fichier en en-tête |
grid | Lignes de séparation |
plain | Aucune décoration |
full | Tout 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
| lesspour 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
catcontinuent de fonctionner
- Les points faibles
- Pas de coloration sur certains formats propriétaires — les fichiers
.logtrè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
| cat | less | bat | |
|---|---|---|---|
| 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 :