Aller au contenu

Maîtriser Fish

Mise à jour :

Logo Fish

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 update
    sudo 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.

  1. Installez Fish :

    Terminal window
    brew install fish

Sous Windows

Sous Windows, Fish peut être installé sur WSL : Windows Subsystem for Linux :

Terminal window
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.

Terminal window
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 :

Terminal window
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.

Fish Config

Pour appliquer un thème :

  1. Lancez fish_config.
  2. Dans l’onglet “Prompts”, cliquez sur “Try it” pour tester les thèmes.
  3. 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 :

Terminal window
alias ll="ls -la"

Cet alias est actif immédiatement, mais temporaire. Pour le rendre permanent, ajoutez-le à votre configuration utilisateur

Terminal window
funcsave ll

Ajout de plugins avec Fisher

Pour aller encore plus loin dans la personnalisation, il existe un gestionnaire de plugins ultra pratique : Fisher.

  1. Installez Fisher :

    Terminal window
    curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
  2. Installez un plugin : Par exemple, pour installer un thème populaire comme bobthefish :

    Terminal window
    fisher install oh-my-fish/theme-bobthefish
  3. Liste des plugins installés :

    Terminal window
    fisher list
  4. 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 :

Terminal window
~/.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 :

Terminal window
git init ~/.config/fish
cd ~/.config/fish
git 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.

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 de history.
    • 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 avec Ctrl + 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 raccourci Ctrl + 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.fish

    Ajoutez-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 :

Terminal window
function nom_de_la_fonction
# Commandes à exécuter
end

Exemple :

Terminal window
function bonjour
echo "Bonjour, utilisateur de Fish !"
end

Pour appeler cette fonction :

Terminal window
bonjour

Utiliser des arguments dans une fonction

Les fonctions Fish peuvent prendre des arguments, accessibles via $argv. Voici un exemple pratique :

Terminal window
function salut
echo "Salut, $argv[1] ! Comment vas-tu ?"
end

Appel de la fonction avec un argument :

Terminal window
salut Bob

Sortie :

Terminal window
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 bonjour

    Cela 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
Terminal window
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."
end
end

Appel :

Terminal window
verifier 8
  • Exemple 2 : Utilisation d’une boucle
Terminal window
function compter
for i in (seq $argv[1])
echo "Nombre : $i"
end
end

Appel :

Terminal window
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 :

Terminal window
function universelle --universal
echo "Ceci est une fonction universelle."
end

Pour supprimer une fonction universelle :

Terminal window
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-start
    echo "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])
    end

    Testez-la avec :

    Terminal window
    functions --help addition
  • Fonctions imbriquées : Vous pouvez appeler une fonction depuis une autre.

    Terminal window
    function parent
    echo "Je suis la fonction parent."
    enfant
    end
    function enfant
    echo "Et moi, je suis la fonction enfant."
    end

Déboguer une fonction

Pour tester ou déboguer une fonction, utilisez l’option --trace :

Terminal window
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 :

Terminal window
set nom valeur

Exemple :

Terminal window
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 :

Terminal window
vim ~/.config/fish/config.fish

Ajoutez cette ligne :

Terminal window
set -gx PATH $PATH:/nouveau/chemin

Rechargez votre configuration :

Terminal window
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_variable
    set -l local_var "Je suis local"
    echo $local_var
    end
  • 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 :

Terminal window
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 :

Terminal window
set

Pour afficher uniquement une variable spécifique, utilisez :

Terminal window
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 :

Terminal window
function afficher
echo "Argument 1 : $argv[1]"
echo "Argument 2 : $argv[2]"
end
afficher "Bonjour" "Fish"

Sortie :

Argument 1 : Bonjour
Argument 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 ? 🐟