Zsh a été commencé en 90 par Paul Falstad, il était étudiant a Princeton… Un de ses profs s'appelait Zhong Shao, sur le LAN de l'université, son login était un zsh. l'histoire pouvait commencer…
Parce que:
Donc ouvrez un terminal et
$ zsh
zsh-newuser-install se lance, ce qui n'est pas idéal. Car zsh sans config c'est dur.
On va donc utiliser une config de zsh “par défaut”… Pour celà, vous fermez ce terminal et en ouvrez un autre (q + exit). Ne faites pas de $ touch ~/.zshrc, attendez d'avoir telecharge une bonne configuration.
$ cd $ svn checkout http://svn.asyd.net/svn/zsh/trunk .zsh $ ln -s .zsh/zshrc .zshrc
Note : la config que nous allons utiliser est de asyd, il l'a commencée en 2001, et la maintient depuis.
Lancer zsh :
$ zsh
Arrivé a ce point , on a tous un shell de cette forme :
"01:14 (user~host) /home/user % [0.11 0.16 - 41% 3%]"
Note : [charge 1 min charge 5 min - charge RAM (en %) charge SWAP (en %)]
Pour le prompt, changer les couleurs, eventuelement les infos et leurs dispositions, voir dans rc.os/prompt.zsh puis rc.os. La définition des couleurs se fait dans c.host/default.zsh
% /usr # 3 frappes gagnées par changement de repertoire % for i in 1 2 3 ; echo $i # plus besoin de do et done
Note : Très pratique, bien sûr la forme bash reste compatible avec zsh. D'ailleurs zsh est entièrement compatible avec bash.
La configuration par défaut n'est pas terrible , et la config d'asyd ne la change pas, je vous ai donc preparé une config.Editez le fichier
~/.zshrc
pour y ajouter :
#Completion zstyle ':completion:*' completer _expand _complete _approximate zstyle ':completion:*:expand:*' tag-order all-expansions zstyle ':completion:*' ignore-parents parent pwd zstyle ':completion:*' list-colors '' zstyle ':completion:*' menu select=1 zstyle ':completion:*' original true zstyle ':completion:*:approximate:*' max-errors par 'reply=( $(( ($#PREFIX+$#SUFFIX)/3 )) numeric )'
Puis pour prendre en compte les modifications :
% source .zshrc % source ~/.zsh
La première frappe sur <TAB> donne le même résultat qu'avec bash par contre les frappes suivantes permettent de parcourir les différents choix proposés.
Pour sortir de la complétion sans choix utilisez <ctrl>+c ou <backspace>.
Le shell propose seulement les répertoires où tu es susceptible d'aller et pas celui où l'on se trouve déjà. Pour changer celà, if faut supprimer
zstyle ':completion:*' ignore-parents parent pwd
du fichier .zshrc.
% mplayer /un/dossier/avec/des/video/<tab>
Ici seules les vidéos sont listées. De même avec votre éditeur de texte, zsh complète avec les fichiers textes seulement.Tester :
% apt-cache <tab> % apt-get ins<tab> % apt-get install opena<tab> % ssh <début nom host><tab>
Note : Pour comprendre le fonctionnement de l'autocomplétion aller voir dans .zsh/rc et rc.osVous en avez pour un moment, zsh corrige les typo, travaille avec les users et les groupes. zsh connait énormément de patrons de commandes.Tester :
% cat `locate Xorg.0.log`<tab> # zsh fait l'autocomplétion sur le résultat du locate et affiche directement le résultat % print $(( 1 + 2 ))tab # zsh sait aussi compter
Note : Nous sommes toujours sur la même ligne, nous n'avons pas fait <entrée> depuis tout à l'heure.Tester :
% /var/*<tab>
Tout a l'heure on a utilisé locate pour retrouver Xorg.0.log mais nous aurions pu laisser zsh chercher…
Exemple :
% cat /**/Xorg.0.log # être patient, sinon <ctrl>+c, <ctrl>+q, l'exemple est un peu extrême
Note :
% echo *(/) # retourne juste les répertoires % echo */ # sans les parenthèse zsh retourne aussi les sim-links % echo *(^/) # retourne juste les fichiers
Note : Avec (@) on filtre sur les liens symboliquesTester :
% mplayer ~/musique/**/*.(flac|wac|aiff) % mplayer ~/musique/**/*.(flac|wav|aiff)~*Police*
Le ~ permet d'enlever des éléments de la sélection.
% mplayer ~/musique/**/*.(flac|wav|aiff)~*Police*~[pP]ink* # Sans les morceaux dont le nom de fichier comporte Police et sans les morceaux dont le nom commence par Pink ou pink.
Avec le bash on connaissait 2 types : les nombres et les chaines de caractères. Avec zsh on en ajoute un : le tableau. Un tableau est un groupement de variables.
Exemple :
% ma_musique=(morceau1.mp3 /media/partage/unautremorceau.mp3)
Ceci crée un tableau ma_musique.
% echo $ma_musique
Ceci affiche le contenu du tableau.
On peut ajouter du contenu au tableau
% ma_musique=($ma_musique encoreunmorceau.flac)
Ou directement
% ma_musique[5]=encoreun.flac
Note : * contrairement à la norme en vigueur dans les beaux langages, le numérotage du tableau commence à 1. * les tableaux sont infinis : on peut laisser du vide dans le tableaux ou le commencer par la fin.Ecouter de la musique :
% mplayer $ma_musique
Ou par ordre alphabétique :
% mplayer $(print $ma_musique | sort)
Note : Nombre d'éléments d'un tableau : ${#ma_musique}
Liste aléatoire :
% mplayer $ma_musique[$RANDOM%${#ma_musique}]
% ma_musique=( /media/*/musique/**/*.(mp3|flac|ogg) ; while true ; do mplayer $ma_musique[$RANDOM%${#ma_musique}] ; done
Libre à vous d'ajouter la ligne “autoload tetris” `a votre .zshrc. Puis <alt>+x et sasissez 'tetris'.
La touche <suppr> donne une tilde, pour y remédier ajoutez au fichier .zshrc :
autoload zkbd
[[ ! -f ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE ]] && zkbd
source ${ZDOTDIR:-$HOME}/.zkbd/$TERM-$VENDOR-$OSTYPE
Puis
% source ~/.zshrc
Pour mettre zsh en shell par défaut, il faut utiliser la commande chsh. Le chemin du shell est /bin/zsh
Le manuel est gigantesque et il est eclaté en une vingtaine de page!