Si vous utilisez encore Bash en 2026, vous passez à côté d’une révolution silencieuse. Fish Shell (Friendly Interactive Shell) n’est pas un simple « Bash avec des couleurs » — c’est un shell qui comprend ce que vous voulez faire avant même que vous ayez fini de taper. Combiné à fzf (recherche floue universelle) et Starship (prompt cross-shell ultrarapide), vous obtenez un environnement de développement tellement fluide que vous vous demanderez pourquoi vous ne l’avez pas adopté plus tôt. Voici le guide complet, prêt à utiliser en 30 minutes.
Pourquoi abandonner Bash (ou Zsh avec Oh My Zsh) ?
Bash est partout. C’est sa force et sa faiblesse. Bash est le shell par défaut sur la quasi-totalité des serveurs Linux, et sa compatibilité POSIX en fait le choix « safe » pour les scripts. Mais pour l’usage interactif quotidien, Bash a 35 ans de retard :
- Pas d’autocomplétion native intelligente :
git chene propose pascheckout. Il faut installerbash-completion, le configurer, et prier. - Pas d’autosuggestions : le shell ne devine pas la commande que vous allez taper en se basant sur votre historique.
- Une syntaxe de script kafkaïenne : les espaces autour des crochets, les guillemets qui mangent les variables, les
[[ ]]vs[ ]— Bash est un champ de mines. - Zsh + Oh My Zsh corrige une partie de ces défauts, mais au prix de lenteurs notables (le prompt peut mettre 500 ms à s’afficher avec trop de plugins) et d’une configuration fragmentée entre le framework et le shell.
Fish répond à tous ces problèmes out of the box, sans plugin, sans framework, sans configuration. Voici comment.
Installation de Fish Shell
Fish est dans les dépôts de toutes les distributions majeures :
# macOS (Homebrew)
brew install fish
# Ubuntu / Debian
sudo apt install fish
# Fedora
sudo dnf install fish
# Arch Linux
sudo pacman -S fish
# Windows (WSL)
sudo apt install fish
Une fois installé, lancez Fish et faites-en votre shell par défaut :
# Lancer Fish
fish
# Définir Fish comme shell par défaut
chsh -s $(which fish)
# Ou, si vous préférez garder Bash par défaut et lancer Fish manuellement,
# ajoutez ceci à la fin de votre ~/.bashrc :
if command -v fish &> /dev/null; then
exec fish
fi
Au premier lancement, Fish vous accueille avec une interface web de configuration (fish_config) accessible via http://localhost:8000. Vous pouvez y choisir votre thème de couleurs et explorer les fonctions. Mais le vrai plaisir commence tout de suite dans le terminal.
La magie de Fish : autocomplétion et autosuggestions
Tapez git suivi d’un espace, puis tapez c : Fish vous propose checkout, commit, cherry-pick, clean avec leurs descriptions respectives. Tapez git checkout et Fish affiche la liste de vos branches locales, navigable aux flèches.
Les autosuggestions sont encore plus bluffantes. Tapez ssh et Fish vous suggère en gris clair le dernier serveur auquel vous vous êtes connecté. Un Ctrl+F ou flèche droite et la suggestion est acceptée. Deux frappes pour vous connecter à votre serveur de production au lieu de quinze.
# Exemples d'autosuggestions magiques
ssh mon-serveur-prod # Suggéré depuis l'historique → Ctrl+F
cd /var/www/mon-super-site # Suggéré → flèche droite
docker compose up -d # Suggéré avec tous les flags
Fish complète aussi les options longues avec leurs descriptions. Tapez docker compose -- et Fish liste --detach, --build, --force-recreate avec une explication en ligne. Cette feature seule fait gagner des dizaines de --help par jour.
Les fonctions Fish : vos alias sous stéroïdes
Fish n’utilise pas la syntaxe d’alias de Bash (alias gs='git status'). À la place, il propose les fonctions, plus puissantes et plus propres :
# Créer une fonction Fish (~/.config/fish/functions/gs.fish)
function gs
git status $argv
end
# Fonction avec comportement conditionnel
function gc
if test (count $argv) -eq 0
git commit
else
git commit -m "$argv"
end
end
# Utilisation
gs # → git status
gc "Fix header" # → git commit -m "Fix header"
Pour enregistrer une fonction rapidement, utilisez funced (l’éditeur de fonctions interactif) :
funced ma-fonction # Ouvre l'éditeur
# Écrivez le corps de la fonction, sauvegardez
funcsave ma-fonction # Persiste dans ~/.config/fish/functions/
fzf : la recherche floue qui transforme tout
fzf (fuzzy finder) est un outil indépendant du shell, écrit en Go, qui ajoute une recherche floue interactive à tout ce qui produit une liste. Combiné à Fish, c’est une bombe de productivité :
# Installation
# macOS
brew install fzf
# Ubuntu/Debian
sudo apt install fzf
# Via mise (gestionnaire de versions universel)
mise install fzf
# Activation dans Fish
echo 'fzf --fish | source' >> ~/.config/fish/config.fish
Les raccourcis indispensables du quotidien :
# Ctrl+R : recherche interactive dans l'historique (remplace history | grep)
# Tapez "docker" et fzf filtre toutes les commandes docker passées
# Ctrl+T : recherche récursive de fichiers dans le répertoire courant
# Sélectionnez un fichier et il est inséré dans la commande
# Alt+C : navigation interactive dans les dossiers
# Tapez, filtrez, et cd directement
Le vrai pouvoir de fzf émerge quand vous le combinez avec d’autres commandes :
# Ouvrir un fichier WordPress avec VSCode (recherche floue dans wp-content)
code (find wp-content -name '*.php' | fzf)
# Tuer un conteneur Docker interactivement
docker ps --format '{{.Names}}' | fzf | xargs docker kill
# Se connecter à une branche Git via recherche floue
git branch | fzf | xargs git checkout
# Chercher et installer un package npm interactivement
npm search (echo '' | fzf --print-query) # Avancé, nécessite un wrapper
Starship : le prompt qui rend votre terminal magnifique
Starship (starship.rs) est un prompt cross-shell écrit en Rust, conçu pour être :
- Ultrarapide : affiché en moins de 10 ms, même avec 15 modules activés. Starship est un binaire compilé, pas un script shell.
- Universel : fonctionne avec Fish, Bash, Zsh, PowerShell, Ion, Elvish, Nushell — changez de shell, gardez votre prompt.
- Informatif sans être verbeux : affiche la branche Git, l’état du repo, la version Node/Python/PHP du projet, le temps d’exécution de la dernière commande, le niveau de batterie, et une icône quand vous êtes en SSH.
Installation en deux commandes :
# Installation du binaire
brew install starship # macOS
curl -sS https://starship.rs/install.sh | sh # Linux
mise install starship # Alternative via mise
# Activation dans Fish
echo 'starship init fish | source' >> ~/.config/fish/config.fish
Starship se configure via un fichier ~/.config/starship.toml. Voici une configuration de départ pour développeur web :
# ~/.config/starship.toml
# Prompt minimal mais informatif pour développeur web
# Ajoute un saut de ligne avant le prompt
add_newline = true
# Format : modules à gauche, rien à droite
format = """
$username
$hostname
$shlvl
$directory
$git_branch
$git_status
$nodejs
$php
$python
$docker_context
$fill
$cmd_duration
$line_break
$character"""
[directory]
truncation_length = 3
truncate_to_repo = false
[git_branch]
format = "on [$branch](bold purple) "
[git_status]
format = '([[$all_status$ahead_behind]]($style) )'
conflicted = "⚠️"
ahead = "⇡"
behind = "⇣"
stashed = "📦"
modified = "✏️"
staged = "📥"
untracked = "🆕"
[nodejs]
format = "via [🐢 $version](bold green) "
[php]
format = "via [🐘 $version](bold blue) "
[docker_context]
format = "via [🐳 $context](bold cyan) "
[cmd_duration]
format = "a pris [$duration](bold yellow) "
min_time = 3000 # Affiche seulement si > 3 secondes
[character]
success_symbol = "[❯](bold green)"
error_symbol = "[❯](bold red)"
Résultat : un prompt qui affiche ~/w/monsite on main ✏️ 🆕 via 🐘 8.3 via 🐳 default suivi de ❯. En un coup d’œil, vous savez que vous êtes dans votre projet WordPress, sur la branche main, avec des fichiers modifiés et non suivis, en PHP 8.3 sous Docker.
Le trio Fish + fzf + Starship : l’intégration parfaite
Voici le fichier ~/.config/fish/config.fish complet qui assemble les trois outils :
# ~/.config/fish/config.fish
# Configuration Fish + fzf + Starship
# ── Starship (prompt) ──
starship init fish | source
# ── fzf (recherche floue) ──
fzf --fish | source
# Configuration fzf : apparence
set -gx FZF_DEFAULT_OPTS '--height 40% --layout=reverse --border --preview "bat --style=numbers --color=always {}"'
# ── Variables d'environnement ──
set -gx EDITOR code
set -gx VISUAL code
# ── Abréviations (se expandent au lancement) ──
abbr -a g git
abbr -a gc 'git commit -m'
abbr -a gco git checkout
abbr -a dc 'docker compose'
abbr -a dcup 'docker compose up -d'
abbr -a dcdown 'docker compose down'
abbr -a wpcli 'wp --path=/var/www/html'
# ── Raccourcis de navigation ──
function cdsites
cd ~/Sites $argv
end
# ── Salutation (optionnelle) ──
function fish_greeting
echo "🐟 Fish $(fish --version | string match -r 'd+.d+.d+') | ⭐ Starship | 🔍 fzf"
echo "Bienvenue $(whoami), nous sommes le $(date '+%A %d %B %Y')"
end
Avec cette configuration, votre quotidien de développeur change radicalement :
Ctrl+R→ recherchez n’importe quelle commande passée en tapant quelques lettresCtrl+T→ insérez un chemin de fichier sans le taperd+ espace → Fish suggère le dernier dossier visitégit ch→ complété engit checkout+ liste des branches- Le prompt vous montre en permanence l’état Git, la version du langage, et le contexte Docker
Astuces avancées pour développeurs WordPress
# Fonction Fish pour wp-cli avec le bon path automatiquement
function wp --wraps='wp'
if test -f composer.json
command wp --path=web/wp $argv
else if test -f wp-config.php
command wp $argv
else
echo "⚠️ Pas de WordPress détecté dans ce dossier"
return 1
end
end
# Recherche floue dans les hooks WordPress avec fzf
function wphooks
rg "add_action|add_filter|do_action|apply_filters" --no-heading |
fzf --delimiter : --preview 'bat --style=numbers --color=always {1}'
end
# Navigation rapide dans le thème actif
function cdtheme
set theme (wp theme list --status=active --field=name 2>/dev/null)
if test -n "$theme"
cd "wp-content/themes/$theme"
else
cd wp-content/themes
end
end
Conclusion
Fish Shell n’est pas un énième shell hipster. C’est un gain de productivité mesurable : autocomplétion prédictive, autosuggestions basées sur l’historique, syntaxe de script propre, et configuration zero-plugin. Ajoutez fzf pour la recherche floue interactive et Starship pour un prompt informatif et élégant, et vous obtenez un terminal de développeur qui travaille avec vous plutôt que contre vous.
Le meilleur dans tout ça ? La migration prend 30 minutes, ne casse rien (Bash reste disponible, vos scripts .sh continuent de fonctionner), et vous pouvez revenir en arrière avec un simple chsh -s /bin/bash. Mais honnêtement, après une semaine avec Fish, vous ne voudrez plus jamais taper git checkout en entier.
Sources : Fish Shell — Site officiel — Fish Shell sur GitHub — fzf — GitHub officiel — Starship — Site officiel — Fish Shell — Tutoriel officiel
Commentaires (0)
Laisser un commentaire
Les commentaires sont modérés. Questions WordPress, cybersécurité ou dev web bienvenues.