Z

J'ai adopté Z-Shell

miamondo Par Le 29/03/2020 à 19:51 comment 0

Bonjour,

Il y a quelques semaines, j'ai fait l'acquisition d'un très beau grimoire édité par la maison d'édition allemande Rheinwerk et qui traite de la programmation Shell. C'est bien dommage qu'une telle collection n'existe pas dans notre belle langue française car dans une bibliothèque, ça en jette. Je possède deux ouvrages de cette collection estampillée deutsche Qualität. Lorsque je les ouvre avec le petit cordon orange qui sert de marque-page, j'ai toujours le sentiment de me plonger dans la Bible pour méditer sur je ne sais quel épître de Saint Torvalds aux Linuxiens.

Z2

Et aujourd'hui, mes biens chers frères, en ce jour où nous sommes rassemblés pour un moment de partage sous la nef de cette magnifique basilique Notre-Dame-de-l'Internet, je vous propose de cheminer avec moi sur les terres de Z-Shell. Quoi? Mais non! Abruti! Ce n'est pas le batteur d'un groupe de Death Metal islandais, c'est le nom d'un puissant interpréteur en ligne de commande. En fait, c'est du bash mais avec une bonne dose de créatine.

1. Installation sous Debian et Archlinux

Sous Debian

 sudo apt update && sudo apt install zsh

Sous Archlinux

 sudo pacman -Syu && sud pacman -S zsh

Les paquets zsh-common et zsh-doc seront également installés.

2. Définir zsh comme shell par défaut

C'est probablement bash qui est votre shell par défaut. Pour le remplacer par zsh, il vous suffit d'entrer la commande suivante:

 chsh -s /bin/zsh

Puis, vous rebootez. À la prochaine ouverture de session, quatre choix s'offrent à vous. Cliquez sur l'image ci-dessous:

Z3

Nous allons nous intéresser au choix (0) qui se contente de créer le fichier de configuration ~/.zshrc et d'y entrer juste un commentaire pour empêcher que ce questionnaire à choix multiple n'apparaisse à la prochaine ouverture de session. À vous ensuite de configurer zsh à votre guise. C'est cette option que personnellement j'ai choisie.

Vous pouvez également choisir de créer vous-même le fichier caché ~/.zshrc et d'y entrer juste un commentaire. Ça revient au même:

 echo #configure > ~/.zshrc

Enfin, vous pouvez choisir l'option (2) qui va vous offrir une configuration standard par défaut avec le thème adam1, un historique des recherches et une complétion bien pratique (Nous allons voir ça un peu plus bas). Vous aurez déjà en mains un outil fonctionnel.

3. Configuration standard par défaut

 

 # Set up the prompt

 autoload -Uz promptinit
 promptinit
 prompt adam1

 setopt histignorealldups sharehistory

 # Use emacs keybindings even if our EDITOR is set to vi
 bindkey -e

 # Keep 1000 lines of history within the shell and save it to   ~/.zsh_history:
 HISTSIZE=1000
 SAVEHIST=1000
 HISTFILE=~/.zsh_history

 # Use modern completion system
 autoload -Uz compinit
 compinit

 zstyle ':completion:*' auto-description 'specify: %d'
 zstyle ':completion:*' completer _expand _complete _correct _approximate
 zstyle ':completion:*' format 'Completing %d'
 zstyle ':completion:*' group-name ''
 zstyle ':completion:*' menu select=2
 eval "$(dircolors -b)"
 zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS}
 zstyle ':completion:*' list-colors ''
 zstyle ':completion:*' list-prompt %SAt %p: Hit TAB for more, or the character to insert%s
 zstyle ':completion:*' matcher-list '' 'm:{a-z}={A-Z}' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=* l:|=*'
 zstyle ':completion:*' menu select=long
 zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
 zstyle ':completion:*' use-compctl false
 zstyle ':completion:*' verbose true

 zstyle ':completion:*:*:kill:*:processes' list-colors '=(#b) #([0-9]#)*=0=01;31'
 zstyle ':completion:*:kill:*' command 'ps -u $USER -o pid,%cpu,tty,cputime,cmd'

4. Configuration personnalisée

Comme je l'ai déjà écrit, j'ai choisi de faire moi-même ma configuration:

 

 autoload -Uz compinit

 compinit

 HISTFILE=~/.histfile
 HISTSIZE=1000
 SAVEHIST=1000

 bindkey -e

 autoload -U colors && colors
 PS1="%{$fg[green]%}%n%{$reset_color%}@%{$fg[red]%}%m%{$reset_color%}%{$fg[yellow]%}%~ %{$reset_color%}% $ %"

 RPROMPT="%*"

 # autoload -U promptinit && promptinit
 # prompt fade

 setopt auto_cd correct rm_star_wait

 

  • Lignes n° 1 et 2 : Activation de la complétion avec la touche Tab. Hyper pratique!
    • Prenons un exemple. Vous souhaitez supprimer une application que vous n'êtes pas sûr de pouvoir correctement orthographier. Vous savez qu'elle commence par un k. Vous entrez la commande suivante avant de presser la touche Tab:
 sudo pacman -S k

  • zsh va vous dérouler une liste d'applications commençant par un k. Vous n'avez plus qu'a vous déplacer avec la touche Tab puis à sélectionner en pressant la touche Entrée et le tour est joué.

 sudo pacman -S keyboard-configuration

  • Lignes n° 3, 4 et 5 : Configuration de l'historique qui peut accepter 1000 entrées.
  • Ligne n° 6 : Utiliser les raccourcis clavier emacs, même si la valeur d'EDITOR est vi
  • Lignes n° 7 et 8 : choix des couleurs pour l'invite de commande, c'est-à-dire le prompt. la ligne n° 11 peut vous paraître particulièrement ardue. En fait, c'est beaucoup plu simple qu'il n'y paraît :
    • fg[green] colore en vert %n (qui correspond à l'utilisateur). fg veut dire foreground (avant-plan).
    • reset_color réinitialise la couleur par défaut. @ est donc blanc.
    • fg[red] colore en rouge %m,qui correspond au nom d'hôte. (chez moi, c'est mws)
    • fg[yellow] colore en jaune le répertoire courant.
    • Cela nous donne:
 miamondo@mws ~ $

  • Ligne n° 9 : Configuration d'un second prompt à droite avec affichage de l'heure en format 24 heures et avec les secondes.
  • Lignes n° 10 et 11 : Possibilité de choisir un thème, par exemple fade. J'ai commenté les deux lignes pour empêcher leur exécution et conserver les couleurs que j'ai moi-même sélectionnées en lignes 10 et 11.
  • Lignes n° 12 : Cette commande setopt effectue trois opérations :
    • auto_cd : Complétion de la commande cd. Par exemple, vous entrez /e/a et vous pressez la touche TAB.
      • /etc/a va s'afficher.
      • Pressez la touche TAB encore une fois et sélectionner le répertoire souhaité (toujours avec la touche TAB), par exemple /etc/apt.
      • Pressez la touche Entrée. Vous vous retrouvez dans le répertoire /etc/apt. Très pratique!
    • correct : correction automatique d'une erreur de commande. Par exemple, vous entrez sl, une commande qui n'existe pas. zsh va vous demander si ce ne serait pas plutôt ls. Cette fonctionnalité est moins utile que la précédente et ne marche pas à tous les coups. J'ai, par exemple, entré la commande sodo pour obtenir les droits de super-administrateur. Je n'ai pas obtenu la correction souhaitée...
    • rm_star_wait : Demande de confirmation de destruction de répertoires. Si vous faites un rm-rf*, le Z-Shell va vous demander une confirmation au bout de dix secondes. C'est une sécurité que je n'ai pas osé tester... Mais je ne doute pas qu'elle fonctionne!

Voilà le résultat avec un choix de couleurs personnalisées (à bâbord) ou bien avec le thème fade (à tribord).

Z5 1      Z4

Conclusion

Sachez qu'il existe un site qui propose tout un tas de configurations, des modules mais également de la documentation :http://ohmyz.sh

Nous voici parvenus au terme de cette modeste présentation de zsh, un shell qui m'a convaincu et que j'ai immédiatement adopté. Pour une découverte plus approfondie, vous pouvez entrer la commande man zsh. Vous pouvez même éditer directement un fichier pdf de ce manuel zsh en rajoutant les lignes suivantes à la fin du fichier de configuration ~/.zshrc:

man()
{
/usr/bin/man $* > ~/temp.md
if [ -s ~/temp.md ]
then 
   pandoc -s temp.md -f markdown -t latex -o temp.pdf
   evince ~/temp.pdf & exit
fi
}

Après avoir entré la commande man zsh dans un terminal, vous obtenez automatiquement ce document pdf : Zshzsh.pdf (83.35 Ko).

 
  • 2 votes. Moyenne 5.00 sur 5.

Ajouter un commentaire

Anti-spam
 
expand_less