Encore un autre shell, mais un shell super évolué. Ce que zsh apporte :

Tout d'abord il faut l'installer, prenez votre gestionnaire de paquets/compilo préféré et installez le. ATTENTION : Les version inférieures à 4.3 ne gère pas l'unicode, les versions supérieures le font.

Prompt

Regarde je change de couleur sous la lumière

color_change="%(?.%{$fg_bold[cyan]%}.%{$fg_no_bold[cyan]%})"
PROMPT="$color_change% %n@%m %{$reset_color%}%# "

Maintenant si vous terminer une commande en ^C, si make échoue, etc, le prompt se change en fg_no_bold[cyan] .

La completion

Activation

Pour pouvoir bénéficier de la completion il faut dire à zsh de l'activer, rajouter ceci dans votre .zshrc :

autoload -U compinit
compinit

la fonction autoload permet de charger un module zsh (ici compinit) et compinit va activer la completion.

tunning de la completion

zsh permet d'adapter la completion à ses besoins, par exemple (tout va dans le .zshrc)

  • pour qua la commande cd offre une completion sur les répertoires locaux puis ceux de la variable cdpath
zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories
  • pour obtenir un menu conviviale pour le completion (avec les flèches du clavier)
zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
  • Pour éviter de reproposer un argument déjà utiliser dans la commande lors de la completion
zstyle ':completion:*:rm:*' ignore-line yes
zstyle ':completion:*:mv:*' ignore-line yes
zstyle ':completion:*:cp:*' ignore-line yes 
  • Pour que les commandes qui demande un host en argument : ssh, telnet, etc. puissent utiliser les hosts connus par ssh (~/.ssh/know_hosts) :
local _myhosts
if [ -d ~/.ssh ]; then
  if [ -f ~/.ssh/known_hosts ];then
    _myhosts=(${=${${(f)"$(<$HOME/.ssh/known_hosts)"}%%[# ]*}//,/ })
   fi
fi
zstyle ':completion:*' hosts $_myhosts
  • enfin si vous voulez pouvoir utiliser une fonction de completion bash parceque votre programme ne dispose pas de completion sous zsh :
autoload -U bashcompinit
bashcompinit
source /path/vers/ma/fonction/bash

Le support des mimes

ZSH supporte les mimes et permet le lancement de programmes précis lors de l'appel d'un fichier avec une extension donnée. Par exemple :

./toto.pdf

lancera un lecteur pdf.

Activation

Dans votre fichier .zshrc ajouter ceci :

autoload -U zsh-mime-setup
autoload -U zsh-mime-handler
zsh-mime-setup

zsh-mime-setup va aller chercher la définition des types mimes dans les fichiers suivants : /etc/mime.types, ~/.mime.types, /etc/mailcap et ~/.mailcap

Tunning du support Mimes

Pour rajouter de nouveaux fichiers mailcap (par exemple /usr/local/etc/mailcap) :

zstyle ':mime:*' mailcap ~/.mailcap /usr/local/etc/mailcap 

Pour rajouter manuellement un mime, il y a deux possibilités (ici pour associer less aux fichiers *.txt) :

zstyle ':mime:.txt:' handler less %s

ou alors utiliser les alias suffix :

alias -s txt="less"

Pour lister les associations définies :

alias -s

Enfin zsh prévois le navigateur web comme un cas particulier, ainsi définir une ordre de préférence des navigateurs : si j'ai firefox tu peux firefox sinon elinks par exemple :

autoload -U pick-web-browser
zstyle ':mime:*' x-browsers firefox elinks
alias -s html=pick-web-browser

Les fonctions internes

ZSH dispose de très nombreuses fonctions internes.

Activation

autoload -U zfinit
zfinit

Fonctions disponibles

Fonctions disponibles en vrac :

  • zcalc : une calculatrice (plus besoin de bc ou autres expr)
  • zargs : un super xargs
  • zmv : une commande permettant de faire du renommage/déplaçage en masse de fichiers.
  • zftp : un client ftp natif

Les modules internes

Pour charger un module :

zmodload zsh/monmodule

Modules disponibles en vrac et de manière non exhaustive

  • clone : permet de cloner le shell courrant
  • datetime : permet la manipulation des dates nativement et simplement
  • files : commandes de manipulation de fichier interne (permet de ne plus avoir de limitation du nombre d'argument par exemple)
  • net/socket : permet de manipuler des sockets
  • net/tcp : offre le support du protocol TCP (un client irc en zsh et un serveur web existe)
  • zpty permet de créer un pty virtuel et de lire/écrire ce qui se passe dedans (à la expect)
  • pcre permet de faire du pattern matching avec des expressions régulières
  • zkbd permet de manipulater la configuration du clavier de manière conviviale

Le globbing

zsh permet la manipulation très avancée des variables permettant d'écrire des scripts sans utiliser sed, grep, find, etc., pouvant aller très loin, je ne mettrais ici que des exemples :

Rechercher tous les fichiers .txt de manières récursive:

ls **/*.txt

Le même en s'assurant qu'il s'agit bien de fichier et non de répertoire :

ls **/*.txt(.)

Le même cherchant indifféremment dans les fichiers cachés ou non :

 ls **/*.txt(D.)

Lister tous les répertoires vides :

print -rl **/*(D/^F)

ou

ls **/*(D/^F)

Liste tous les fichiers vides :

ls **/**(D.L0))

Lister les 10 fichiers les plus gros :

zmodload zsh/stat
print -rl ./**/*(d`stat +device .`OL[1,10])

Renommage massif de fichier mkv : mise en minuscule du nom du fichier sauf la première lettre de chaque mot, remplacement des “.” par “ ” et des “_” par “ ”.

zmv '(*).mkv' '${${(LC)1//./ }//_/ }.mkv'
unix/zsh_le_z_shell.txt · Last modified: 2010/01/12 14:29 (external edit)