Passer à ZSH

Publié par Edouard le

Vous vous ennuyez un peu ? Vous voulez pigmenter votre expérience sous Linux ? Personnaliser au maximum votre prompt ? Ou simplement voir du pays, changer un peu du super omniprésent Bash ? Pourquoi pas tenter ZSH ?

Est-ce douleureux ? Non. Il y a vraiment très peu de différence à l’usage. C’est d’ailleurs un des gros avantages, ZSH offre une compatibilité assez complète avec Bash. Ce qui n’est pas forcément le cas d’autres shells plus exotiques. Mais ZSH offre aussi beaucoup de petits plus qui au final vous le feront aimer d’amour.

L’auto-complètement (autocompletion)

Par rapport au Bash par défaut, ZSH propose des améliorations :

  • un menu navigable avec les flèches ou tabulation quand il y a plusieurs choix possibles
  • complète même à différents endroits les chemins complets (cd /e/X[tab] => cd /etc/X11)

Mais l’auto-complètement fonctionne aussi pour les options/arguments des commandes si vous faites un « tab » après un -.

Voici quelques captures pour mieux comprendre.

Menu de navigation
Complètement multiple

L’auto-complètement fonctionne aussi sur les variables d’environnement par ex.

Et même avec certaines commandes, de manière intelligente, comme avec kill (qui proposera la liste de vos processus etc). Que du bonheur !

L’historique plus évolué

Il s’agit en fait de la première fonctionnalité qui m’avait poussée à tester ZSH au début. Quand vous ouvrez plusieurs terminaux sur votre poste, avec Bash, vous aurez un historique par terminal. Avec ZSH, vous pourrez avoir un historique partagé. Plus besoin de se rappeler dans quel terminal une commande a été tapée.

Il y a aussi la possibilité de parcourir les arguments d’une commande de manière intelligente :

cd [UP]

parcourra dans l’historique les options de cd uniquement. J’arrive certes à faire presque l’équivalent sous Bash, mais via un raccourcis à 3 touches (du moins avec un clavier AZERTY), et ça parcourt bêtement tous les arguments.

Les prompts

Autre amélioration, les prompts. En plus du prompt classique à gauche, ZSH propose aussi un prompt à droite (pour avoir l’heure, la branche git courante etc).

Pour vous rendre compte du degré de personnalisation possible :

https://github.com/robbyrussell/oh-my-zsh/wiki/Themes

https://github.com/robbyrussell/oh-my-zsh/wiki/External-themes

Navigation directe

Un peu plus difficile à prendre en main. Pourquoi taper cd devant un nom de répertoire ? Quand on pourrait juste taper le nom du répertoire ? Que pourrait-on bien faire d’autre de toute façon avec le nom d’un répertoire.

cd Documents

devient

Documents

J’avoue que je n’ai toujours pas pris le coup…

L’autojump

Ce n’est pas une exclusivité ZSH mais il est souvent associé à ce shell. Dans la droite lignée des outils pour feignasse sysadmin, autojump est juste génial. J’assume ma feignassitude !!!

En gros, autojump va collecter les répertoires que vous utilisez, pour les pondérer si besoin, et avec la commande « j » (oui juste j, comme jump), vous pourrez retourner dans un de ces répertoires en tapant qu’une partie du chemin.

Ex avec ~/Documents/Personnel/vaches/Marguerite

Avec bash, sans autojump :

cd ~/Doc[tab]Per[tab]vaches/Mar[tab]+[entrée]

Avec ZSH, sans autojump :

cd ~/Doc/Per/vac/Mar[tab]+[entrée]

Avec ZSH et autojump :

j Mar[entrée]

Pour connaitre les stats :

j -s

Vous inquiétez pas, la base reste en locale.

Oh My ZSH

LE principal avantage de passer à ZSH est de pouvoir utiliser oh-my-zsh ! C’est un ensemble de configuration, scripts, plugins etc pour améliorer, configurer et personnaliser plus facilement ZSH. En fait oh-my-zsh gomme les quelques défauts qui rendait le passage à ZSH encore difficile. Certes ZSH propose un outil de configuration, normalement activé lors de son premier lancement, mais ça reste complexe vu le nombre d’options.

Avec oh-my-zsh, ce sont des dizaines de configuration partagées, et surtout des plugins prêt à l’emploi. L’ensemble dans un dépôt git régulièrement mis à jour !

Exemple le plugin pour dnf, qui va créer des alias bien pratiques :

dnfs => dnf search
dnfi => sudo dnf install
dnfu => sudo dnf update
etc

Ou encore le plus connu, le plus git, qui vous indiquera dans le prompt, la branche actuelle.

Je ferais sûrement un billet à part pour Oh-My-ZSH.

Les défauts

Après de nombreuses années d’utilisation, et pour être objectif, je vais aussi citer les défauts que j’ai pu constater.

ZSH n’est pas BASH

L’échappement de certains caractères comme le * est à respecter plus strictement avec ZSH. Sous Bash je n’ai jamais eu de soucis à faire par ex « dnf list kernel* » alors qu’avec ZSH il va vouloir chercher un fichier local. J’ai pris l’habitude du coup de faire « dnf list kernel\* ».

Et, c’est tout !

ZSH n’est pas aussi répandu

Au quotidien, à 99% les machines/serveurs etc sont installés avec Bash comme shell par défaut. KSH pour les plus tordus, mais très rarement ZSH.

Quand je fais des scripts shell, je continu donc d’utiliser le shebang #!/bin/bash (ou autres variantes), pour que ça soit portable.

Les extras nécessaires

Beaucoup de personnalisations pour ZSH reposent sur des outils tierces. Le plus courant étant des polices spécifiques (ex powerline). Ce n’est pas toujours évident d’installer tout ça partout. Ce n’est pas très gênant car on parle que des personnalisations, mais c’est à savoir.

Conclusion

Le mieux serait de vous faire votre propre idée, en testant vous même ZSH ?

Voici un billet sur comment changer de shell.

Et un sur l’installation de ZSH et Oh-My-ZSH.

Catégories : Shell

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *