Zsh, c'est trop cool

Posted on 2014-09-06 in Trucs et astuces

Depuis plusieurs mois maintenant, j'utilise zsh comme interpréteur par défaut. L'un des principaux avantages de zsh par rapport à bash est la possibilité de complétion avancée. Sous bash, lorsqu'on appuie sur <TAB> pour obtenir la complétion d'une commande, bash se contente de lister les possibilités. Sous zsh, les pressions suivantes sur <TAB> passe en revue les autres. Cela fonctionne également pour les arguments des commandes.

Mais ce n'est pas tout. Avec bash, le raccourcis ^w supprime l'intégralité de la chaîne juste à gauche du curseur. Si la chaîne est un chemin, zsh va simplement supprimer les caractères jusqu'au '/' le plus proche.

Zsh est aussi capable de proposer des corrections de commande. Ainsi, si je tape systemctlw au lieu de systemd et que cette commande n'existe pas, zsh va me proposer la correction :

zsh: correct 'systemctlw' to 'systemctl' [nyae]?

Autre point très intéressant pour un développeur, si le dossier courant est géré par git, zsh est capable d'afficher diverses informations telles que la branche, s'il y a des fichiers modifiés mais non commités ou encore le nombre de jours depuis le dernier commit. Cette fonctionnalité est aussi disponible pour mercurial mais dans une moindre mesure.

J'espère vous avoir convaincu que la puissance de zsh. Si vous avez très certainement déjà un paquet zsh dans les dépôts de votre distribution, je vous conseille d'utiliser le projet Oh my zsh!. Le but de ce projet est de fournir un framework de configuration pour zsh. Il contient de nombreux plugins (plus de 150 d'après le site officiel) et de nombreux thèmes (plus de 100 d'après le site).

La plupart des options courantes (comme l'activation de l'autocorrection) sont activables via des variables dans le fichier .zshrc. Le système de plugins va vous permettre de facilement utiliser de nouveaux alias (gp pour git push, gup pour git pull --rebase), les informations fournies par git, la possibilité d'ajouter sudo devant une commande en pressant deux fois ESC, de faire automatiquement appel à sudo pour les commandes systemd qui en ont besoin et bien plus !

Pour finir, voilà une petite capture de mon terminal. Il affiche des informations sur l'état d'un dépôt git, un cercle rouge si une commande à un code de retour différent de 0. Il s'agit du thème avit légèrement modifié.

Une capture de mon terminal avec un thème oh-my-zsh