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.
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] .
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.
zsh permet d'adapter la completion à ses besoins, par exemple (tout va dans le .zshrc)
zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories
zstyle ':completion:*' menu select=2 zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s
zstyle ':completion:*:rm:*' ignore-line yes zstyle ':completion:*:mv:*' ignore-line yes zstyle ':completion:*:cp:*' ignore-line yes
local _myhosts if [ -d ~/.ssh ]; then if [ -f ~/.ssh/known_hosts ];then _myhosts=(${=${${(f)"$(<$HOME/.ssh/known_hosts)"}%%[# ]*}//,/ }) fi fi zstyle ':completion:*' hosts $_myhosts
autoload -U bashcompinit bashcompinit source /path/vers/ma/fonction/bash
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.
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
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
ZSH dispose de très nombreuses fonctions internes.
autoload -U zfinit zfinit
Fonctions disponibles en vrac :
Pour charger un module :
zmodload zsh/monmodule
Modules disponibles en vrac et de manière non exhaustive
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'