3 bonnes raisons de remplacer Bash par Zsh
Si vous utilisez beaucoup le terminal, vous pouvez probablement comprendre la difficulté fréquente de taper de longues commandes. La complétion des onglets de Bash est inefficace, les chemins de fichiers sont fastidieux à écrire et les fautes de frappe sont un désagrément persistant. J'ai trois bonnes raisons pour lesquelles Zsh répond à ces problèmes et améliore le flux de travail de votre terminal.
Sommaire
Un vaste écosystème de plugins pour résoudre des milliers de problèmes
Utiliser des shells dans leur état par défaut est une expérience fastidieuse car ils manquent invariablement des fonctionnalités utiles et ergonomiques dont nous avons besoin pour être vraiment productifs. Par exemple, taper de longues commandes peut être laborieux et impitoyable lorsque vous faites des erreurs. Nous avons besoin d’un moyen d’augmenter fonctionnellement les capacités de nos shells de base et de leur fournir des fonctionnalités qui les rendent considérablement plus faciles à utiliser.
Pour fournir à nos shells des fonctionnalités supplémentaires, une approche consiste à modifier directement nos fichiers de configuration de shell et à ajouter des fonctions utilitaires personnalisées. Par exemple, vous pouvez insérer des alias ou des fonctions dans votre fichier de configuration shell, et ils deviennent des ajouts permanents à votre environnement shell.
foo() {
echo "This is the foo function"
}
L'exemple précédent vous donnera une fonction utilitaire réutilisable appelée « foo » qui n'imprimera qu'un message de base ; vous pouvez l'utiliser comme une commande. Cependant, même si la modification de votre shell est courante et même nécessaire pour les outils personnalisés personnels, il s'agit d'une approche très manuelle et potentiellement plus de travail que vous n'êtes prêt à effectuer à long terme.
Une autre approche (et souvent meilleure) consiste à utiliser des plugins. Les plugins sont simplement des packages constitués de fonctions shell, écrites, testées et publiées par quelqu'un d'autre, donc tout le travail est déjà fait pour vous. Pour installer des plugins, vous utiliserez généralement un framework shell, lui-même composé de fonctions shell. Un framework shell initialisera votre environnement shell, facilitera l'installation et l'activation des plugins et fournira souvent des fonctionnalités supplémentaires.
Zsh a été le premier shell à établir un écosystème de plugins approprié avec un framework connu sous le nom de Oh My Zsh. Après de nombreuses années, l'écosystème Zsh a mûri au point où il existe des milliers de plugins, de thèmes et de frameworks. Beaucoup de gens recommandent souvent Oh My Zsh, mais je préfère Zinit pour l'accent mis sur un temps de démarrage rapide, qui n'est que de quelques millisecondes.
Quel que soit le framework que vous choisissez, il existe une multitude de plugins Zsh parmi lesquels choisir, qui résolvent tous un problème que quelqu'un a déjà rencontré. Passer un peu de temps à rechercher des plugins peut conduire à des gains d’efficacité significatifs à long terme, ce qui en fait un investissement rentable. Au lieu de parcourir YouTube, je recherche souvent des plugins, échangeant la procrastination contre des gains de productivité.
Assistance de commande intelligente avec des finitions de première classe
Comme mentionné précédemment, taper une longue commande uniquement pour que le shell renvoie une erreur prend du temps et est frustrant. Nous avons besoin de garde-fous pour maintenir nos actions humaines maladroites sur la bonne voie, et c'est exactement ce que font les obus terminés. Lorsque vous tapez une commande et appuyez sur la touche Tab, le shell répertorie toutes les options disponibles.
Bash propose des complétions de shell, mais le processus de sélection est têtu, m'obligeant souvent à appuyer sur la touche de tabulation 10 à 15 fois pour compléter une seule option. Bien que les complétions de Zsh soient meilleures par défaut, les plugins et les frameworks augmentent considérablement leurs capacités.
Les images précédentes montrent les complétions Zsh augmentées d'un plugin qui exploite l'utilitaire fzf. Fzf est un utilitaire indispensable qui vous permet d'affiner vos sélections en temps réel grâce à la recherche approximative. Lorsqu'elle est utilisée avec des complétions, votre saisie n'a pas besoin d'être entièrement correcte, et fzf vous aidera toujours à trouver l'option appropriée. C'est utile lorsque vous tapez des dizaines de commandes en succession rapide et que vous ne prenez pas le temps d'être correct à 100 % en orthographe.
Construire des commandes est purement pratique, et ce n'est pas une œuvre d'art, donc les fonctionnalités du shell doivent être orientées pour le rendre aussi efficace que possible. Zsh fait un excellent travail grâce à une excellente prise en charge de l'exécution des commandes. Je ne pourrais pas utiliser un shell très longtemps si son système de complétion n'est pas à la hauteur de l'offre de Zsh.
Édition intelligente en ligne de commande avec l'éditeur de ligne Zsh
La ligne de commande ne consiste pas seulement à saisir des commandes ; il s'agit souvent aussi de les éditer. Zsh et Bash disposent tous deux d'éditeurs de ligne de commande compétents qui fournissent des contrôles avancés pour manipuler le texte de la commande avant de le saisir.
Bash utilise GNU Readline, un éditeur de ligne de commande général utilisé par de nombreux projets logiciels différents. Il vous permet de modifier la ligne de commande à l'aide des raccourcis clavier Emacs ou Vi, ce qui donne l'impression que les commandes d'édition ressemblent davantage à l'utilisation d'un éditeur de texte. Readline est configurable, mais il n'est pas extensible sans écrire du code C personnalisé. Le Zsh Line Editor (ZLE) adopte une approche différente car il est extensible via des scripts shell. L'extensibilité de ZLE permet de puissantes fonctionnalités communautaires telles que la coloration syntaxique et les widgets personnalisés, en plus de prendre en charge les raccourcis clavier de style Emacs et Vi.
Les widgets (à mon avis) sont là où le ZLE brille vraiment. Un widget n'est qu'une fonction shell qui est généralement activée via un raccourci clavier. Les widgets ont accès au texte de la ligne de commande et vous permettent d'exécuter n'importe quelle commande shell dessus avant d'accepter la commande. Cela ouvre un monde d'opportunités pour rendre votre flux de travail un peu moins pénible.
Mes deux widgets préférés rendent les modifications de Git (un outil de suivi du code source) et le choix des fichiers moins fastidieux.
Widget Git
J'utilise fréquemment Git pour suivre et examiner les modifications du code source. Mon premier widget simplifie la commande commit. Faire des commits Git est une tâche fréquente, et taper la commande entière à chaque fois, y compris un message descriptif, devient fatigant :
git commit --all --message "make lots of bugs"
Après avoir tapé « git commit –all –message » une douzaine de fois, la répétition commence à m'épuiser. C'est pourquoi j'utilise le widget suivant.
git_commit_with_message() {
local msg=$BUFFER
BUFFER="git commit --all --message "${msg}""
zle accept-line
}
zle -N git_commit_with_message
bindkey "e^M" git_commit_with_message
Je place la fonction shell précédente dans mon .zshrc et je la recharge. Je peux ensuite effectuer un commit Git en tapant un message descriptif et en appuyant sur Alt+Entrée. Le widget l'enveloppe ensuite dans une commande « git commit –all –message » pour moi. Cela me permet d'économiser beaucoup d'énergie à long terme.
Widget de sélection de chemin
Le deuxième widget sélectionne un chemin de système de fichiers à l'aide d'un gestionnaire de fichiers au lieu de le saisir. Taper de longs chemins de fichiers est fastidieux, en particulier lors de la navigation dans des structures de répertoires approfondies.
yazi_pick_path() {
local file=$(yazi --chooser-file=>(cat)) (( -z "$file" )) && zle redisplay && return
LBUFFER+=""$file""
zle redisplay
}
zle -N yazi_pick_path
bindkey 'ey' yazi_pick_path
Désormais, lorsque je tape une commande et que j'ai besoin d'un chemin, je peux appuyer sur Alt+Y et une fenêtre du gestionnaire de fichiers Yazi s'ouvrira dans le terminal. Lorsque je sélectionne un fichier ou un répertoire et que j'appuie sur Entrée, Yazi insérera pour moi un chemin cité dans la ligne de commande.
Le ZLE est puissant
Ces widgets me permettent de supprimer les éléments laborieux liés à la saisie des commandes. Le système ZLE est puissant et avec un peu de connaissances en scripts shell, vous pouvez rendre les commandes difficiles beaucoup plus faciles à saisir. C'est l'une de ces fonctionnalités qui rend Zsh vraiment extensible.
Bien que Bash dispose de frameworks populaires (Bash-it et Oh My Bash) accompagnés de plugins utiles, je ne pense pas que leurs offres soient comparables à l'écosystème Zsh. De plus, Zsh propose également des systèmes de complétion et d'édition de lignes beaucoup plus avancés. Ces trois systèmes puissants me permettent d'exploiter le travail d'autres personnes et de personnaliser mon environnement d'une manière que je trouve difficile à faire avec Bash.
