Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
unix:zsh_le_z_shell [2008/04/21 15:23]
jll
unix:zsh_le_z_shell [2010/01/12 13:29] (current)
Line 1: Line 1:
 +Encore un autre shell, mais un shell super évolué. Ce que zsh apporte :
 +  * Les fonctionnalités normale d'un shell (heureusement)
 +  * Une completion très évoluée (le truc qui permet de tout faire avec la touche tab :))
 +  * Une completion programmable (on rajoute facilement plein de nouveau truc perso)
 +  * Le support des types mimes
 +  * La compatibilité avec les autres shells : bash, sh, ksh, csh
 +  * De nombreuses fonctions (très utiles ou complètement inutiles (un tetris par exemple)
 +  * De nombreux modules
 +  * Un licence conviviale (BSD like)
  
 +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 ====
 +<​file>​
 +color_change="​%(?​.%{$fg_bold[cyan]%}.%{$fg_no_bold[cyan]%})"​
 +PROMPT="​$color_change% %n@%m %{$reset_color%}%#​ "
 +</​file>​
 +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 :
 +<​file>​autoload -U compinit
 +compinit</​file>​
 +
 +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
 +<​file>​zstyle ':​completion:​*:​*:​cd:​*'​ tag-order local-directories path-directories</​file>​
 +   * pour obtenir un menu conviviale pour le completion (avec les flèches du clavier)
 +<​file>​zstyle ':​completion:​*'​ menu select=2
 +zstyle ':​completion:​*'​ select-prompt %SScrolling active: current selection at %p%s</​file>​
 +   * Pour éviter de reproposer un argument déjà utiliser dans la commande lors de la completion ​
 +<​file>​zstyle ':​completion:​*:​rm:​*'​ ignore-line yes
 +zstyle ':​completion:​*:​mv:​*'​ ignore-line yes
 +zstyle ':​completion:​*:​cp:​*'​ ignore-line yes </​file>​
 +   * Pour que les commandes qui demande un host en argument : ssh, telnet, etc. puissent utiliser les hosts connus par ssh (~/​.ssh/​know_hosts) :
 +
 +<​file>​local _myhosts
 +if [ -d ~/.ssh ]; then
 +  if [ -f ~/​.ssh/​known_hosts ];then
 +    _myhosts=(${=${${(f)"​$(<​$HOME/​.ssh/​known_hosts)"​}%%[#​ ]*}//,/ })
 +   fi
 +fi
 +zstyle ':​completion:​*'​ hosts $_myhosts</​file>​
 +   * enfin si vous voulez pouvoir utiliser une fonction de completion bash parceque votre programme ne dispose pas de completion sous zsh : 
 +<​file>​autoload -U bashcompinit
 +bashcompinit
 +source /​path/​vers/​ma/​fonction/​bash</​file>​
 +
 +===== 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 :
 +<​code>​./​toto.pdf</​code>​
 +lancera un lecteur pdf.
 +
 +==== Activation ====
 +Dans votre fichier .zshrc ajouter ceci : 
 +<​file>​autoload -U zsh-mime-setup
 +autoload -U zsh-mime-handler
 +zsh-mime-setup</​file>​
 +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) : 
 +<​file>​zstyle ':​mime:​*'​ mailcap ~/.mailcap /​usr/​local/​etc/​mailcap </​file>​
 +Pour rajouter manuellement un mime, il y a deux possibilités (ici pour associer less aux fichiers *.txt) :
 +<​file>​zstyle ':​mime:​.txt:'​ handler less %s</​file>​
 +ou alors utiliser les alias suffix : 
 +<​file>​alias -s txt="​less"</​file>​
 +
 +Pour lister les associations définies : 
 +<​code>​alias -s</​code>​
 +
 +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 :
 +<​file>​autoload -U pick-web-browser
 +zstyle ':​mime:​*'​ x-browsers firefox elinks
 +alias -s html=pick-web-browser</​file>​
 +
 +===== Les fonctions internes =====
 +ZSH dispose de très nombreuses fonctions internes.
 +
 +==== Activation ====
 +<​file>​
 +autoload -U zfinit
 +zfinit
 +</​file>​
 +
 +==== 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 :
 +<​code>​
 +zmodload zsh/​monmodule
 +</​code>​
 +
 +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:
 +<​code>​
 +ls **/*.txt
 +</​code>​
 +
 +
 +Le même en s'​assurant qu'il s'agit bien de fichier et non de répertoire :
 +<​code>​
 +ls **/*.txt(.)
 +</​code>​
 +
 +Le même cherchant indifféremment dans les fichiers cachés ou non :
 +<​code>​
 + ls **/​*.txt(D.)
 +</​code>​
 +
 +Lister tous les répertoires vides :
 +<​code>​
 +print -rl **/*(D/^F)
 +</​code>​
 +ou
 +<​code>​
 +ls **/*(D/^F)
 +</​code>​
 +
 +Liste tous les fichiers vides :
 +<​code>​
 +ls **/​**(D.L0))
 +</​code>​
 +
 +Lister les 10 fichiers les plus gros :
 +<​code>​
 +zmodload zsh/stat
 +print -rl ./​**/​*(d`stat +device .`OL[1,10])
 +</​code>​
 +
 +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 " ".
 +<​code>​
 +zmv '​(*).mkv'​ '​${${(LC)1//​./​ }//_/ }.mkv'
 +</​code>​
unix/zsh_le_z_shell.txt · Last modified: 2010/01/12 13:29 (external edit)