J’ai adopté Z-Shell

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 » et « vegan ». 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.

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.

Sommaire

  1. Installation sous Debian Buster 10
  2. Définir zsh comme shell par défaut
  3. Configuration par défaut
  4. Configuration personnalisée
  5. Conclusion

1. Installation sous Debian 10 buster

sudo apt update && sudo apt install 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 :

 cap

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

if [[ -z $DISPLAY && $XDG_VTNR -eq 1 ]]; then
exec startx
fi

  • 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 apt purge 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 apt purge keyboard-configuration
  • Lignes n° 4, 5 et 6 : Configuration de l’historique qui peut accepter 1000 entrées.
  • Ligne n° 8 : Utiliser les raccourcis clavier emacs, même si la valeur d’EDITOR est vi
  • Lignes n° 10 et 11 : 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 volgor)
    • fg[yellow] colore en jaune le répertoire courant.
    • Cela nous donne ordinosor@volgor ~/Downloads $
  • Ligne n° 13 : Configuration d’un second prompt à droite avec affichage de l’heure en format 24 heures et avec les secondes.
  • Lignes n° 15 et 16 : 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° 18 : 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!
  • Lignes n° 20, 21 et 22 : À l’ouverture de session, exécution automatique de la commande startx. Ça, c’est en rapport avec cet article que j’ai rédigé il y a un mois.

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

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.

Je pense qu’il existe également quelques ouvrages qui traite de ce sujet.

À bientôt,

Benoît

2 commentaires sur “J’ai adopté Z-Shell

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.