Maîtriser Fish
Mise à jour :
Quand on parle de shells, les noms de Bash et Zsh reviennent toujours en premier. Et pour cause, ce sont des standards ! Mais, entre nous, il y a un nouveau joueur dans la partie : Fish (Friendly Interactive Shell). Contrairement à ses cousins, Fish a été conçu dès le départ pour simplifier la vie des utilisateurs, tout en étant plus intuitif et visuellement agréable. Pas besoin d’être un expert pour en tirer parti.
Après avoir exploré Bash, la solution par défaut sur de nombreuses distributions Linux, et Zsh, connu pour sa flexibilité et ses fonctionnalités avancées, il était temps de regarder ce que Fish apporte à la table. Et je dois dire qu’il ne déçoit pas : complétion intelligente, syntaxe simple, et surtout, il est prêt à l’emploi sans avoir besoin de passer des heures en configuration.
Alors, prêt à plonger ? 🐟
L’Histoire de Fish
Pour comprendre pourquoi Fish est devenu un shell si apprécié, il faut remonter à sa création en 2005. À cette époque, les développeurs et administrateurs système utilisaient principalement Bash ou Zsh, des outils puissants, mais souvent intimidants pour les nouveaux venus. Entre les syntaxes cryptiques et la nécessité de longues configurations pour les rendre ergonomiques, ces shells avaient besoin d’un concurrent plus user-friendly.
Les débuts : une vision simplifiée
Fish, acronyme de Friendly Interactive Shell, a été conçu avec un objectif clair : offrir un shell moderne et convivial sans sacrifier la puissance. Ses créateurs, inspirés par les lacunes des outils traditionnels, voulaient créer un shell qui :
- Était prêt à l’emploi, sans configuration complexe.
- Offrait une expérience interactive plus intuitive grâce à des suggestions automatiques et une complétion intelligente.
- Était agréable visuellement, avec une syntaxe colorée pour améliorer la lisibilité.
La première version publique de Fish a rapidement attiré l’attention des développeurs et administrateurs système curieux d’essayer quelque chose de nouveau. À cette époque, les fonctionnalités comme la complétion contextuelle ou les invites dynamiques étaient rares, voire inexistantes dans les autres shells.
Un pari sur l’innovation
Ce qui distingue Fish dès ses débuts, c’est son approche radicale : s’affranchir des conventions historiques des shells Unix, souvent déroutantes pour les débutants. Par exemple :
- La syntaxe de Fish est volontairement différente de Bash et Zsh. Pas besoin de
export VAR=value
ou de mettre des parenthèses étranges autour des commandes. - Les fonctions universelles, les alias dynamiques, et l’historique partagé entre sessions étaient déjà des idées innovantes, bien avant leur adoption par d’autres outils.
Adoption et communauté
Dans les années qui suivent sa sortie, Fish se fait une place grâce à une communauté d’utilisateurs enthousiastes. Le projet gagne en visibilité notamment grâce à GitHub, où il est publié en open source. Les contributions commencent à affluer, et le shell évolue rapidement.
Parmi les jalons marquants de son évolution :
- 2009 : Introduction de l’interface web locale pour configurer le shell
facilement (
fish_config
). - 2013 : Lancement de Fish 2.0, qui améliore la gestion des scripts et introduit des raccourcis clavier spécifiques.
- 2016 : Avec Fish 2.3, le gestionnaire de plugins Fisher devient incontournable pour étendre les capacités du shell.
- 2018 : Fish 3.0 marque un tournant avec une amélioration massive des performances et un support encore plus étendu pour les outils modernes.
Installation de Fish
Installer Fish est un jeu d’enfant, quel que soit votre système d’exploitation. Voici un guide simple pour vous lancer, que vous soyez sous Linux, macOS, ou Windows.
Sous Linux
La plupart des distributions Linux offrent Fish directement dans leurs dépôts. Voici comment l’installer selon votre distribution.
-
Ubuntu / Debian :
Terminal window sudo apt updatesudo apt install fish -
Fedora :
Terminal window sudo dnf install fish -
Arch Linux :
Terminal window sudo pacman -S fish -
Autres distributions : Consultez le site officiel de Fish ↗ pour des instructions spécifiques.
Sous macOS
macOS utilise zsh ou bash par défaut, mais vous pouvez installer Fish très facilement grâce à Homebrew.
-
Installez Fish :
Terminal window brew install fish
Sous Windows
Sous Windows, Fish peut être installé sur WSL : Windows Subsystem for Linux :
sudo apt install fish
Changer votre shell par défaut
Après l’installation, vous pouvez définir Fish comme shell par défaut pour
éviter de taper fish
à chaque fois.
chsh -s $(which fish)
Relancez votre terminal, et vous voilà directement dans le monde de Fish !
Personnalisation et Configuration de Fish
L’un des atouts majeurs de Fish est sa capacité à être prêt à l’emploi, tout en offrant une personnalisation très simple. Je vais vous montrer comment rendre Fish non seulement fonctionnel, mais aussi agréable à utiliser, tout en exploitant ses suggestions intelligentes et ses couleurs dynamiques.
Configurer Fish
L’invite par défaut de Fish est déjà pas mal, mais pourquoi ne pas lui donner un style qui vous ressemble ? La commande magique pour ça, c’est :
fish_config
Cela ouvre une interface web locale où vous pouvez :
- Choisir un thème d’invite parmi les options disponibles.
- Personnaliser l’apparence et les informations affichées, comme le chemin du répertoire, l’état du git, etc.
Pour appliquer un thème :
- Lancez
fish_config
. - Dans l’onglet “Prompts”, cliquez sur “Try it” pour tester les thèmes.
- Une fois satisfait, cliquez sur “Set Prompt” et Theme Set.
Ajouter des alias
Les alias permettent de simplifier vos commandes. Contrairement à Bash ou Zsh, avec Fish, vous n’avez pas besoin de modifier manuellement un fichier de configuration.
Pour créer un alias :
alias ll="ls -la"
Cet alias est actif immédiatement, mais temporaire. Pour le rendre permanent, ajoutez-le à votre configuration utilisateur
funcsave ll
Ajout de plugins avec Fisher
Pour aller encore plus loin dans la personnalisation, il existe un gestionnaire de plugins ultra pratique : Fisher.
-
Installez Fisher :
Terminal window curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher -
Installez un plugin : Par exemple, pour installer un thème populaire comme bobthefish :
Terminal window fisher install oh-my-fish/theme-bobthefish -
Liste des plugins installés :
Terminal window fisher list -
Désinstallez un plugin si nécessaire :
Terminal window fisher remove <nom_du_plugin>
Liste des plugins disponibles sur le site de Fisher ↗
Enregistrer et partager votre configuration
Toutes vos configurations sont stockées dans le répertoire :
~/.config/fish
Si vous souhaitez sauvegarder ou partager votre configuration entre plusieurs machines, il suffit de copier ce fichier, ou mieux, de le gérer via Git. Par exemple :
git init ~/.config/fishcd ~/.config/fishgit add .git commit -m "Initial Fish configuration"
Avec ces astuces, Fish deviendra un outil qui non seulement vous fait gagner du temps, mais aussi qui vous ressemble. Prochaine étape : ajouter des extensions et des intégrations pour booster votre productivité. 🐟
Les Raccourcis Clavier Fish
L’un des nombreux avantages de Fish est son interactivité fluide, renforcée par une série de raccourcis clavier qui vous permettent d’accélérer votre travail. Ces raccourcis sont soit natifs, soit personnalisables pour répondre à vos besoins spécifiques.
Raccourcis Clavier de Base
Voici les raccourcis de base que tout utilisateur de Fish devrait connaître. Ils vous feront gagner un temps fou dans la navigation et la gestion des commandes.
-
Historique de commandes :
↑
/↓
: Parcourez les commandes précédentes.Ctrl + R
: Recherche dans l’historique avec une recherche incrémentale intelligente. Tapez une partie de la commande, et Fish vous propose les correspondances en direct.
-
Édition de commandes :
Ctrl + A
: Place le curseur au début de la ligne.Ctrl + E
: Place le curseur à la fin de la ligne.Ctrl + U
: Efface tout avant le curseur.Ctrl + K
: Efface tout après le curseur.Alt + ←
/Alt + →
: Déplacez le curseur mot par mot.
-
Suppression :
Ctrl + W
: Supprime le mot avant le curseur.Ctrl + D
: Supprime le caractère sous le curseur ou ferme le terminal si la ligne est vide.
Naviguer dans les Dossiers et Fichiers
Fish facilite la gestion des répertoires avec des raccourcis pratiques :
-
Changer de répertoire :
Alt + ↑
/Alt + ↓
: Navigue dans l’historique des répertoires.Ctrl + Alt + D
: Accède directement au dernier répertoire visité.
-
Recherche de fichiers : Si vous avez installé le plugin fzf, vous pouvez activer une recherche fuzzy dans vos fichiers :
Terminal window bind \cf 'fzf'
Suggestions Automatiques et Navigation
Fish est célèbre pour ses suggestions intelligentes. Ces raccourcis vous permettent de maximiser leur utilisation :
-
Complétion automatique :
Tab
: Affiche les suggestions de complétion pour la commande ou l’argument en cours.→
: Accepte la suggestion affichée (complétion basée sur l’historique).
-
Recherche rapide :
Ctrl + S
: Active la recherche dans les résultats dehistory
.Alt + .
: Insère le dernier argument de la commande précédente.
Gestion des Processus
Pour manipuler les processus directement depuis Fish, ces raccourcis sont essentiels :
-
Contrôle de l’exécution :
Ctrl + C
: Arrête une commande ou un script en cours.Ctrl + Z
: Met un processus en pause (en arrière-plan).
-
Relancer ou gérer un processus :
fg
: Relance un processus mis en pause avecCtrl + Z
.jobs
: Liste les processus en arrière-plan.
Raccourcis Avancés et Personnalisés
Fish vous permet également de créer vos propres raccourcis pour les tâches répétitives.
-
Ajouter un raccourci personnalisé : Les raccourcis sont définis avec la commande
bind
. Par exemple, pour définir un raccourciCtrl + T
qui affiche l’heure actuelle :Terminal window bind \ct 'date' -
Lister tous les raccourcis : Utilisez cette commande pour voir les raccourcis actifs et leurs actions associées :
Terminal window bind -
Modifier un raccourci existant : Si vous voulez changer un raccourci, éditez votre fichier
config.fish
:Terminal window vim ~/.config/fish/config.fishAjoutez-y des commandes comme :
Terminal window bind \cc 'clear'
Raccourcis pour les Scripts et Fonctions
Si vous utilisez Fish pour écrire des scripts, il existe des raccourcis pour accélérer vos tâches courantes :
-
Exécuter un script ou une fonction rapidement :
-
Ajoutez des alias ou des abréviations (
abbr
) pour exécuter des scripts avec des noms courts :Terminal window abbr gs "git status"
-
-
Lancer un script avec un raccourci clavier : Assignez un raccourci qui exécute directement un script Fish :
Terminal window bind \cr 'source ~/scripts/mon_script.fish'
Pour découvrir ou approfondir l’utilisation des raccourcis clavier dans Fish, consultez :
- La documentation officielle des raccourcis : Fish Key Bindings ↗
- La commande
bind
pour inspecter et personnaliser vos raccourcis.
Avec ces raccourcis, Fish devient un véritable outil de productivité au quotidien. Prenez le temps de les apprendre et de les personnaliser : vous serez surpris de voir à quel point ils simplifient vos flux de travail. 😊🐟
Les Fonctions Avancées dans Fish
Dans Fish, les fonctions permettent de regrouper plusieurs commandes sous un même nom, pour simplifier les tâches répétitives ou complexes. Contrairement aux alias, elles offrent plus de flexibilité et permettent des scripts dynamiques. Avec une syntaxe simple et lisible, Fish facilite la création et l’utilisation de fonctions avancées.
Créer une fonction
Créer une fonction dans Fish est un jeu d’enfant. Voici la syntaxe de base :
function nom_de_la_fonction # Commandes à exécuterend
Exemple :
function bonjour echo "Bonjour, utilisateur de Fish !"end
Pour appeler cette fonction :
bonjour
Utiliser des arguments dans une fonction
Les fonctions Fish peuvent prendre des arguments, accessibles via $argv
. Voici
un exemple pratique :
function salut echo "Salut, $argv[1] ! Comment vas-tu ?"end
Appel de la fonction avec un argument :
salut Bob
Sortie :
Salut, Bob ! Comment vas-tu ?
Vous pouvez accéder à plusieurs arguments :
$argv[1]
pour le premier.$argv[2]
,$argv[3]
, etc., pour les suivants.$argv
pour tous les arguments.
Persistance des fonctions
Les fonctions que vous créez dans une session Fish sont temporaires, sauf si vous les enregistrez.
-
Rendre une fonction permanente : Utilisez
funcsave
:Terminal window funcsave bonjourCela enregistre la fonction dans
~/.config/fish/functions/bonjour.fish
. -
Lister les fonctions existantes :
Terminal window functions -
Supprimer une fonction :
Terminal window functions -e nom_de_la_fonction
Fonctions dynamiques
Les fonctions Fish peuvent inclure des variables et des conditions pour répondre à des besoins complexes.
- Exemple 1 : Utilisation d’une condition
function verifier if test $argv[1] -lt 10 echo "Le nombre est inférieur à 10." else echo "Le nombre est supérieur ou égal à 10." endend
Appel :
verifier 8
- Exemple 2 : Utilisation d’une boucle
function compter for i in (seq $argv[1]) echo "Nombre : $i" endend
Appel :
compter 5
Fonctions universelles
Une fonction universelle est accessible dans toutes les sessions Fish (y compris
les nouveaux terminaux). Pour créer une fonction universelle, utilisez l’option
--universal
:
function universelle --universal echo "Ceci est une fonction universelle."end
Pour supprimer une fonction universelle :
functions -e --universal universelle
Fonctionnalités avancées des fonctions
Fish offre des outils puissants pour enrichir vos fonctions.
-
Événements personnalisés : Les fonctions peuvent être liées à des événements.
Terminal window function dire_bonjour --on-event session-startecho "Bienvenue dans Fish !"end -
Fonctions d’aide : Ajoutez une documentation directement dans vos fonctions :
Terminal window function addition --description "Ajoute deux nombres"echo $argv[1] + $argv[2] = (math $argv[1] + $argv[2])endTestez-la avec :
Terminal window functions --help addition -
Fonctions imbriquées : Vous pouvez appeler une fonction depuis une autre.
Terminal window function parentecho "Je suis la fonction parent."enfantendfunction enfantecho "Et moi, je suis la fonction enfant."end
Déboguer une fonction
Pour tester ou déboguer une fonction, utilisez l’option --trace
:
functions --trace nom_de_la_fonction
Cela vous permettra de voir chaque commande exécutée et de corriger les éventuels problèmes.
Les fonctions avancées dans Fish sont un outil essentiel pour personnaliser votre environnement et automatiser vos tâches. Avec leur syntaxe simple et leur flexibilité, elles transforment Fish en un compagnon puissant pour les développeurs et les administrateurs système. 🐟
Variables d’Environnement et Leur Gestion Simplifiée dans Fish
La gestion des variables d’environnement dans Fish est beaucoup plus intuitive que dans les autres shells comme Bash ou Zsh. Avec des commandes claires et des options avancées, vous pouvez facilement manipuler vos variables, les rendre locales, globales ou universelles, et les gérer efficacement.
Déclarer une variable
Dans Fish, les variables s’assignent avec la commande set
:
set nom valeur
Exemple :
set username "Alice"echo $username
Sortie :
Alice
Les variables dans Fish ne nécessitent pas le mot-clé export
(comme dans
Bash). Elles sont locales par défaut, mais vous pouvez les rendre globales ou
universelles (voir plus bas).
Rendre une variable persistante
Les variables définies avec set
sont temporaires et ne survivent qu’à la
session actuelle. Pour rendre une variable persistante, ajoutez-la au fichier de
configuration ~/.config/fish/config.fish
.
Exemple :
vim ~/.config/fish/config.fish
Ajoutez cette ligne :
set -gx PATH $PATH:/nouveau/chemin
Rechargez votre configuration :
source ~/.config/fish/config.fish
Étendue des variables
Dans Fish, les variables peuvent avoir différentes portées :
-
Locale (par défaut) : Valide uniquement dans le scope où elle est définie, comme une fonction.
Terminal window function test_variableset -l local_var "Je suis local"echo $local_varend -
Globale : Disponible dans toute la session actuelle.
Terminal window set -g global_var "Je suis globale"echo $global_var -
Universelle : Partagée entre toutes les sessions Fish et persistante.
Terminal window set -U universal_var "Je suis universelle"
Supprimer une variable
Pour supprimer une variable, utilisez simplement set -e
:
set -e variable_a_supprimer
Vérifier les variables définies
Vous pouvez afficher toutes les variables actuellement définies dans votre session Fish avec :
set
Pour afficher uniquement une variable spécifique, utilisez :
echo $nom_de_la_variable
Manipuler le $PATH
Le $PATH
est une variable d’environnement importante qui indique où chercher
les exécutables. Avec Fish, vous pouvez facilement le modifier :
-
Ajouter un chemin au
$PATH
:Terminal window set -U PATH $PATH /chemin/supplementaire -
Afficher les chemins actuels :
Terminal window echo $PATH -
Retirer un chemin :
Terminal window set -U PATH (string match -v /chemin/supplementaire $PATH)
Variables dynamiques et substitutions
Fish permet d’utiliser des substitutions pour attribuer des valeurs dynamiques aux variables.
-
Exemple avec une commande :
Terminal window set date_actuelle (date)echo $date_actuelle -
Exemple avec une liste :
Terminal window set fichiers (ls)echo $fichiers
Variables et scripts
Les variables définies dans un script sont locales par défaut. Vous pouvez les passer en argument pour les manipuler dynamiquement :
function afficher echo "Argument 1 : $argv[1]" echo "Argument 2 : $argv[2]"end
afficher "Bonjour" "Fish"
Sortie :
Argument 1 : BonjourArgument 2 : Fish
Avec Fish, la gestion des variables d’environnement est intuitive et puissante. Que vous travailliez avec des variables locales, globales ou universelles, Fish vous offre des outils simplifiés et ergonomiques pour gérer votre environnement efficacement. 😊
Conclusion
En 2025, Fish est reconnu comme l’un des meilleurs shells modernes pour son ergonomie et sa simplicité. Il est particulièrement prisé des développeurs, des administrateurs système, et même des débutants. Pourquoi ? Parce qu’il combine les atouts suivants :
- Une interface intuitive avec des couleurs, des suggestions, et une gestion avancée des commandes.
- Une compatibilité avec la plupart des outils de l’écosystème Unix.
- Une communauté active, qui continue de développer des plugins et des thèmes pour enrichir l’expérience utilisateur.
Fish n’est pas seulement un outil, c’est une philosophie : faire plus, avec moins de complications. Sa trajectoire, de projet marginal à shell incontournable, prouve qu’il a su répondre à un besoin réel. Aujourd’hui, il n’est pas rare de voir des équipes entières de développeurs basculer sur Fish, séduits par son approche résolument moderne.
Et vous, êtes-vous prêt à rejoindre l’aventure Fish ? 🐟