Pourquoi je suis passé à zsh - 2ème partie

Gazette Linux n°184 — mars 2011

Anderson Silva

Matt Woodson

Eric Gérard

Adaptation française 

Gaël Montreuil

Relecture de la version française 

Article paru dans le n°184 de la Gazette Linux de mars 2011.

Cet article est publié selon les termes de la Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.


Table des matières

Correction orthographique
Englobement étendu
Les alias
Mathématiques en virgule flottante
Informations de contrôle de version dans le prompt
Historique vertical des arguments
Conclusion
À propos des auteurs

Le mois dernier, Matt et moi avions décidé de partager avec vous pourquoi zsh valait le détour. Matt partageait son fichier .zshrc dans cet article, et nous avons commencé à parcourir quelque uns des bonus disponibles avec zsh. Nous avions conclu la première partie de cette série d'articles sur zsh en promettant de nous attaquer à quelques autres fonctions. Et bien, nous y voilà:

Correction orthographique

Avec bash, effectuez une erreur de frappe avec vim et vous obtiendrez ce message infamant command not found dans la fenêtre du terminal. Avec zsh:

$ ivm
zsh: correct 'ivm' to 'vim' [nyae]? 

Pour autoriser cette fonction ajoutez: setopt CORRECT à votre fichier .zshrc.

Si vous vous sentez vraiment chanceux, vous pouvez dire à zsh d'essayer de corriger vos fautes de frappe, même dans la liste d'arguments en utilisant: setopt CORRECT_ALL.

Englobement étendu

Trouvez vous find (sans jeu de mots) un peu trop lourd à utiliser? Ne vous méprenez pas, j'aime la commande find, mais l'englobement de zsh rend certaines formes de la commande zsh un peu laides.

Quelques exemples:

  1. Trouver tous les exécutables de chaque propriétaire dans le répertoire courant et ses sous-répertoires:

    avec find:

    $ find . -perm -u+x -type -f

    avec zsh:

    $ ls -s **/*(.x)

  2. Trouver les fichiers de taille supérieure à 100MB dans le répertoire courant et ses sous-répertoires:

    avec find:

    $ find . -type f -size 100M

    avec zsh:

    $ ls **/*(.Lm+100)

  3. Lister tous les fichiers non .jpg dans le répertoire courant et ses sous-répertoires:

    avec zsh:

    $ ls **/^*.jpg

Vous pouvez autoriser l'englobement dans votre fichier .zshrc en ajoutant:

setopt extendedglob

Si vous voulez voir toutes les options d'englobement supportées par ls zsh entrez:

$ ls *(<tab>
completing glob qualifier % -- device files
) -- end of qualifiers
* -- executable plain files
+ -- + command name
- -- follow symlinks toggle
. -- plain files
/ -- directories
: -- modifier
= -- sockets
@ -- symbolic links
...

Les alias

zsh utilise différents types d'alias: régulier, suffixe et global.

Les alias réguliers sont traités de la même façon qu'avec bash. Ces alias doivent être exécutés dans la ligne de commande (en premier) du terminal, par exemple:

alias ll=’ls -la’

Les alias suffixes lancent une commande basée sur l'extension des fichiers. Les alias suffixes sont utilisés avec la commande alias -s. Voici ma fonctionnalité favorite des alias zsh: En ajoutant cette ligne:

alias -s html=vim 

Lorsque vous entrez un nom de fichier avec son extension .html, quelque chose comme:

$ index.html

zsh va automatiquement invoquer vim pour l'ouvrir.

Les alias globaux peuvent être utilisés n'importe où dans la ligne de commande et pas seulement la commande de position. On le comprend mieux avec un exemple. L'alias global défini par:

alias -g G=’|grep ‘'

sera invoqué comme suit:

$ cat /var/log/messages G ERROR

Et la sortie s'effectuera avec la commande grep.

Mathématiques en virgule flottante

Un script shell donné:

(( X = 5.0 + 0.5 ))
(( Y = 33.0 / 9.0 ))
echo $X
echo $Y

donnera en sortie

5.5000000000
3.6666666667

Souvent avec bash, j'ai eu besoin d'effectuer des calculs en virgule flottante pour différentes raisons. Maintenant, avec zsh, vous n'avez pas besoin d'invoquer des programmes externes comme bc ou perl pour effectuer des calculs en virgule flottante.

Informations de contrôle de version dans le prompt

Si vous avez déjà utilisé git, vous avez probablement vérifié une branche, puis oublié dans quelle branche vous étiez, et lancé: git branch -a pour vous localiser dans le référentiel. Avec zsh, vous pouvez personnaliser votre prompt de façon à ce qu'il affiche toutes les informations pertinentes nécessaires pendant que vous naviguez dans quelques branches de systèmes de contrôle de version très fournis.

Pour que les informations VCS soient affichées, vous devez:

  1. Charger le module vcs_info dans zsh. Vous obtiendrez cela en ajoutant la ligne suivante dans votre fichier .zshrc:

    autoload -Uz vcs_info

  2. Fixer les zstyles pour vcs_info. Ici, vous devez être capable de dire quel type de VCS zsh doit détecter, et comment il doit faire. Pour une information plus détaillée consultez zstyles pour vcs_info dans les pages du manuel zsh.

    zstyle ':vcs_info:*' enable git cvs svn

    Si vous consultez le fichier .zshrc de Matt proposé le mois dernier, vous verrez plusieurs autres zstyles configurés pour gérer la couleur et le comportement de la fonction vcs_info.

  3. Appeller la fonction vcs_info avant chaque prompt. Cela sera effectué par une fonction zsh véritablement intéressante appelée precmd(), que nous développerons dans la troisième partie de la série consacrée à zsh.

    precmd() {
    vcs_info ‘prompt’
    }

  4. Fixer la variable PROMPT avec la variable vcs_info_msg_0. Avec zsh, PROMPT est la même chose que PS1.

    PROMPT='${vcs_info_msg_0_}%B%F{blue}]─>%f%b’'

    Sur cette copie d'écran, mon prompt me dit quel VCS j'utilise, git, dans quelle branche du référentiel je me trouve, et dans quel état de validation je suis actuellement.

    L'astérisque jaune '*' signifie que j'ai modifié un fichier.

    Le plus jaune '+' signifie que j'ai ajouté un fichier mais je dois encore le valider.

Historique vertical des arguments

Ok, je viens d'inventer ce nom "Historique vertical des arguments", mais vous me comprenez. Savez-vous comment avec bash (et zsh), lorsque vous êtes sur la ligne de commandes, utiliser les flèches verticales haut et bas pour naviguer dans l'historique des commandes shell?

Avec bash, vous êtes peut-être familiers de la commande Alt+., qui vous amène au dernier argument de l'entrée précédente de votre historique. Et bien, avec zsh, on peut utiliser: Alt+/ (slash) et Alt+, (virgule) pour se déplacer dans l'historique des arguments utilisés... Vous avez compris? Essayez ceci:

$touch 1 2 3 4 5
1 2 3 4 5
$ cp <Alt-Slash> /tmp

La commande ci-dessus avec Alt+/ génèrera:

$ cp 5 /tmp/

Tapez deux fois Alt+/, à la place d'une fois et cela génèrera:

$ cp 4 /tmp/

De la même façon que vous utilisez Alt+/ pour naviguer à travers la liste des arguments précédents, vous pouvez utiliser Alt+, pour revenir en arrière.

Conclusion

Je ne prétends pas être un expert de zsh, et au cours des quelques semaines passées, j'ai titillé le cerveau de Matt à chaque fois que j'avais une question sur zsh, et, à chaque fois il m'a décrit une nouvelle fonctionnalité. J'espère, que tout cela vous a donné quelques raisons supplémentaires de jeter un oeil sur zsh, et nous sommes impatients de finir cette série d'articles sur zsh le mois prochain en écrivant sur les fonctions precmd() et preexec() de zsh avec un ou deux exemples d'utilisation.

À propos des auteurs

Anderson Silva travaille comme ingénieur de solutions IT chez Red Hat, Inc. Il détient un BS d'informatique obtenu à l'Université de Liberty , un MS en Systèmes d'information à l'Université du Maine. Il est Architecte Certifié Red Hat et a publié de nombreux articles sur les systèmes Linux dans des revues comme: Linux Gazette, Revista do Linux et Red Hat Magazine. Anderson est marié, depuis 11 ans,avec son amour d'université, Joanna (qui l'a aidé en relisant ses articles avant leurs parutions). Ils ont 3 enfants. Quand il ne travaille pas ou n'écrit pas, il pratique la photographie, passe du temps avec sa famille, fait du cyclisme, regarde les courses de Formule 1 et d'Indy Cars et emmène ses enfants faire du karting.

Matt Woodson travaille comme ingénieur de solutions IT chez Red Hat, Inc. Matt a été employé dans différents postes, de l'administration système à ingénieur qualité en passant par les réseaux , dans de nombreuses compagnies Linux parmi lesquelles Red Hat, Novell et Caldera. Il est Ingénieur Certifié Red Hat et a passé du temps comme professeur en classes RHCE (Red Hat Certified Engeneer) dans tout le pays. Matt et sa femme Mariah sont mariés depuis 3 ans et attendent leur première fille pour février 2011.

Adaptation française de la Gazette Linux

L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.

Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://www.traduc.org/Gazette_Linux.

Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.