Zsh

Note pour lol : ne t’inquiète ce que je met ici partiras sur le wiki dès que j’aurais le temps de mettre un peu de forme dans tout ça.

Je crée ce sujet pour parler un peu de zsh.

Quand je parle de “vrais shell” ou de ce que je fais quand je suis en CLI dans 92,08 % des cas, je parle de l’utilisation de zsh.

L’un des principaux trucs de bien avec zsh c’est le globbing étendu. Pour s’en servir il faut utiliser les options EXTENDEDGLOB et NULL_GLOB comme ceci :

ça c’est à placer dans ${HOME}/.zshrc
avec cela on peut utiliser le très connu :

qui va passer à la commande cmd tout les fichiers du répertoire courant et des répertoires en dessous. Il est possible de l’obtenir aussi en bash 4 ou superieur (le bash de squeeze possède cette option) grâce à l’option shopt -s globstar).

Mais on peut faire des choses bien plus fines :

Si je veux pas les fichier cachés :

Si je ne veux que les répertoires cachés ou non :

Si je ne veux pas les dossiers cachés :

Autrement dis :
[ul]
[li]/ pour chercher les dossiers[/li]
[li]. pour les fichiers (sans les dossiers)[/li]
[li]D pour prendre en compte les noms qui commencent par . (et qui sont donc cachés)[/li]
[li]N permet de ne pas avoir d’erreur si aucune correspondance n’est trouvée[/li][/ul]
Il y en a pleins d’autres. Vous voulais en savoir plus ?

C’est spécifique à zsh (zsh et bash ne permettent pas tout cela) donc n’allez pas lancer ça dans votre bash en me demandant pourquoi mes commandes ne marchent pas.

Perso, je veux toujours en savoir plus, donc merçi :ugeek: de partager tes connaissances avec nous !

Le problème n’est pas vraiment leurs performances intrinsèques, mais plutôt de ce que tu en fais.

ne va rien t’afficher pendant un certain temps puis il va tout t’afficher d’un coup alors que :

afficheras les fichiers au fure et à mesure.
Si tu veut donner la liste des paquets à un programme (cmd) qui va pour chaque fichier lu sur l’entrée standard effectuer une action qui prend 1s :

va prendre Ns + plus le temps initial (qui peut être long) N étant le nombre de fichiers. Alors que :

va prendre nettement moins de temps car dès que find trouve un fichier il l’envoie à cmd, ce dernier commence son traitement alors que find cherche le second fichier et ainsi de suite. Il mettras un peu plus de N secondes.

Yes MisterFreez,

Comme tetrix j’apprécie positivement ton partage de connaissance, ça m’intéresse ! (comme tjs c’est le temps d’étudier tout ça qui fait défaut)

Ok ! maintenant je comprends bien pourquoi tu préfereras find dans certains cas par rapport au globbing.

Je n’ai jamais utilisé zsh (j’ai pas ressenti le besoin de qque chose de “+ mieux” que bash)

aptitude search zsh p fatrat-czshare - fatrat plugin allowing download and upload p zsh - Interpréteur de commandes doté de nombreus p zsh-beta - A shell with lots of features (dev tree) p zsh-beta-doc - zsh beta documentation - info/HTML format p zsh-dbg - Interpréteur de commandes doté de nombreus p zsh-dev - Un interpréteur de commandes avec beaucoup p zsh-doc - Documentation de zsh aux formats info et H p zsh-static - A shell with lots of features (static link p zshdb - debugger for Z-Shell scripts

Si je veux tester zsh, j’installe simplement zsh et zsh-doc, et je pourrais faire un

et tester tes commandes, c’est aussi simple que ça ?

Je ne connaissais pas “l’entrisme”, si j’avais voulu dire la même chose que toi, j’aurais dit “de plus, je fais du prosélytisme pour zsh”.

Le prosélytisme donne (éventuellement) des prosélytes, mais je ne sais pas comment qualifier ceux sur qui l’entrisme a produit ses fruits : des entriturés ? :laughing: (Edit : des entrismés ? endoctrinés ? des convertis ( ce serait marrant), bon te casse pas la tête avec ça, hein ! je me tapes un délire là dessus )

Par contre je ne sais pas comment on appelle ceux qui pratiquent le prosélytisme, de prosélyteurs peut-être ? (Edit : ça sonne pas bien ! peut-être des prosélytistes ? ou des prêcheurs tout simplement ? no lo sabe )

Précise juste que les commandes que tu donnes sont pour zsh quand c’est le cas, sinon on ne se comprend pas !

Bon, faut que j’aille bosser tes soluces awk, pas encore eu le temps avec tout ça !

Byby

Bonsoir Misterfreez et merci pour le partage des notions.

J’utilise également zsh depuis quelques années, probablement à cause du tuto d’Alexis de Lattre, et je voulais apprendre à mieux m’en servir, donc je lis tes astuces avec plaisir.

Comme il est prévu que cela apparaisse sur le wiki, pourrais-tu également préciser ce qu’est le globbing étendu ?

Je n’ai pas les mêmes comportements pour “du”. Par exemple :

m’affiche la taille de tous les fichiers récursivement :open_mouth:

C’est ma faut c’est l’option -s qui va rend du non récursif, pas la faute au shell.

[quote=“Rantanplan aussi !”]Si je veux tester zsh, j’installe simplement zsh et zsh-doc, et je pourrais faire un

et tester tes commandes, c’est aussi simple que ça ?[/quote]
Oui.

Encore un truc intéressant. Quand on commence à faire du shell et qu’on lis pas les man on a tendance à faire ça :

Pour remplacer le - par des _ dans le contenu d’une variable (oui je sais tr permet aussi de le faire).

zsh possède une syntaxe pour ne pas avoir à utiliser sed :

v='c-o-u-c-o-u' echo ${v/-/_} # affiche c_o-u-c-o-u echo ${v:s/-/_} # affiche c_o-u-c-o-u echo ${v:gs/-/_} # affiche c_o_u_c_o_u

Bon ça c’est bien sympa, mais si j’en parle c’est uniquement pour montrer autre chose qui déchire. Souvent dans la vie quotidienne sur son shell on a à faire du renommage en masse est c’est pas génial à faire, sauf sous zsh !
Première chose :

cela permet d’avoir la commande zmv le mv amélioré de zsh. Je pense que l’autodocumentation montre des exemples très parlant :

$ zsh Usage: zmv [OPTIONS] oldpattern newpattern where oldpattern contains parenthesis surrounding patterns which will be replaced in turn by $1, $2, ... in newpattern. For example, zmv '(*).lis' '$1.txt' renames 'foo.lis' to 'foo.txt', 'my.old.stuff.lis' to 'my.old.stuff.txt', and so on. Something simpler (for basic commands) is the -W option: zmv -W '*.lis' '*.txt' This does the same thing as the first command, but with automatic conversion of the wildcards into the appropriate syntax. If you combine this with noglob, you don't even need to quote the arguments. For example, alias mmv='noglob zmv -W' mmv *.c.orig orig/*.c
Donc on décris une expression régulière pour décrire la forme des fichiers à renommer puis on indique comment les renommer.
On peut même faire des choses comme ça :

c=1 zmv '(*).JPEG' 'photo$((c++)).jpg'
Dernière astuce retirer les espace de tout les noms de fichiers du répertoire courant :

zmv supporte certaines options très classique de mv (-i -f -v), il possède une option très pratique -n qui permet de ne pas exécuter la commande mais de vérifier si les arguments font bien ce que l’on veux.

Il existe aussi zcp et zln.

C’est un bon exemple de la forte cohérence de la syntaxe de zsh. Il n’y a pas de cas particulier ce que l’on peut faire sur une variable on peut le faire sur n’importe quel variable dans n’importe quel contexte.

Salut,

Je ne suis pas inquiet!
J’utilise ZSH depuis mes débuts ici (je me demande si ce n’est pas toi qui m’y a poussé).
Par contre, je suis heureux de découvrir toutes tes astuces, je n’utilise pas 1% des capacités de ZSH (à part le joli prompt… :mrgreen: ) et c’est dommage.

Dans un script, pour bénéficier de la puissance de zsh, il suffit de mettre ça:
#!/bin/zsh ?

Autre question, est-il possible dans un script de passer (en cours de route) de bash à zsh ?

[quote=“Rantanplan aussi !”]…je ne sais pas comment on appelle ceux qui pratiquent le prosélytisme…[/quote]Des casse-coui… :005

[quote=“lol”]Salut,

Je ne suis pas inquiet!
J’utilise ZSH depuis mes débuts ici (je me demande si ce n’est pas toi qui m’y a poussé).
Par contre, je suis heureux de découvrir toutes tes astuces, je n’utilise pas 1% des capacités de ZSH (à part le joli prompt… :mrgreen: ) et c’est dommage.[/quote]
Pareil pour moi, régulièrement je lis des trucs sur zsh pour découvrir un ou deux nouveaux trucs.

[quote=“lol”]Dans un script, pour bénéficier de la puissance de zsh, il suffit de mettre ça:
#!/bin/zsh ?[/quote]
Non

#!/usr/bin/zsh

Oui mais tu perd toutes les variables à chaque changement de shell.

Pour ajouter encore des trucs, il y a une système d’alias évolué en zsh avec les alias de suffixes et les alias globaux.

Les alias de suffixe se définissent avec l’option -s d’alias. Il se crée ainsi :

alias -s ext='cmd'

Il permet ensuite d’écrire des commandes de la forme (cmd peut évidement avoir des arguments) :

./path/to/file.ext

Qui exécuteras alors :

cmd ./path/to/file.ext

Par exemple avec l’alias :

alias -s pdf='xpdf'

un peut lire les fichiers pdf avec la commande :

./chemin/fichier.pdf

Les alias globaux permettent d’écrire des alias pour les utiliser ailleurs qu’en début de commande. L’exemple le plus classique c’est ça :

alias -g C='| wc -l'

ensuite une commande comme

lspci C

donneras la liste des périphériques PCI de l’ordinateur.

Mais il y a plus efficace que ça, les abréviations ! Ca c’est vraiment un truc dont je ne peux plus me passer. Dans mon .zshrc j’ai ça :

typeset -Ag abbreviations abbreviations=( "Ia" "| awk" "Ig" "| grep" "Ip" "| $PAGER" "Ih" "| head" "It" "| tail" "Is" "| sort" "Iw" "| wc" )
Après avoir écris une commande il me suffit de taper "Ig " (donc un I majuscule suivi d’un g et d’un espace pour voir ajouter “| grep” (à la place de Ig). C’est trèa agréable à utiliser.

Salut MisterFreeZ,

Bon, j’ai rien contre zsh que je me suis d’ailleurs installé pour au moins pouvoir tester tes commandes le cas échéant

[quote=“MisterFreez”][…]
zsh possède une syntaxe pour ne pas avoir à utiliser sed :

v='c-o-u-c-o-u' echo ${v/-/_} # affiche c_o-u-c-o-u echo ${v:s/-/_} # affiche c_o-u-c-o-u echo ${v:gs/-/_} # affiche c_o_u_c_o_u[/quote]
Là c’est même légèrement + rapide sous bash :

[code]bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)

v=‘c-o-u-c-o-u’
echo ${v/-/_}
c_o-u-c-o-u

echo ${v//-/_}
c_o_u_c_o_u
[/code]

[quote=“MisterFreez”][…]
On peut même faire des choses comme ça :

c=1 zmv '(*).JPEG' 'photo$((c++)).jpg'[/quote]
Ici zsh remporte le match haut la main, perso sous bash j’ai pas mieux que ça

[code]####### GNU bash, version 4.1.5

find -iname ‘*.jpeg’ | sort

./fichier1322954852.JPEG
./Rep_1/fichier1322954853.JPEG
./Rep_2/fichier1322954854.JPEG
./Rep_3/fichier1322954855.JPEG
[/code]
[size=85][code]####### GNU bash, version 4.1.5

c=1 ; for file in $(find -name '.JPEG’) ; do mv ${file} ${file%/}/photo_$((c++)).jpeg ; done[/code][/size]

[code]####### GNU bash, version 4.1.5

find -iname ‘*.jpeg’ | sort

./photo_3.jpeg
./Rep_1/photo_1.jpeg
./Rep_2/photo_2.jpeg
./Rep_3/photo_4.jpeg
[/code]
Si tu penses qu’on peut le faire directement avec find (je ne pense pas, mais je n’en suis pas certain) donne une autre solution que celle que tu avais déjà donné et qui ne marche pas sous bash comme sous zsh ( ben oui, je l’ai maintenant, j’suis chiand hein ? :mrgreen: :laughing: )

zsh 4.3.10 ou GNU bash, version 4.1.5(1) find . -name '*.jpeg' -exec var=\{\} && mv \{\} ${var/.jpeg/.JPEG} \; find: Paramètre manquant pour « -exec »
Je l’avais noté en me disant : “super !” puis le jour où j’en ai eu besoin j’ai constaté avec dépit que ça ne fonctionnait pas, groumfff …

Pour le reste c’est pareil, on peut faire avec bash, c’est un peu plus long c’est vrai.

Sinon j’ai remarqué que le man de szh fait 314 lignes là où le man de bash en compte 4345 ! ( j’ai une montagne de travail, mais j’ai pas un shell Corse moi :laughing: )

Je ne sais pas pourquoi il y a une telle différence ? il doit bien y avoir une raison !

En tout cas moi je reste sous Bash, je l’adore malgrés ses défauts

Ciao :033

[quote=“lol”][…]

S’il n’y avait qu’eux !!! :005 :005

Non … il faut toujours rajouter à des endroits stratégiques des esprits malicieux miniatures qui pédallent trés trés vite quand il faut … :mrgreen: :005

[quote=“Rantanplan aussi !”]Là c’est même légèrement + rapide sous bash :

[code]bash --version
GNU bash, version 4.1.5(1)-release (i486-pc-linux-gnu)

v='c-o-u-c-o-u’
echo ${v/-/_}
c_o-u-c-o-u

echo ${v//-/_}
c_o_u_c_o_u[/code][/quote]
Tu viens de m’apprendre une syntaxe (ça marche aussi sous zsh). Mais réglons une bonne foie pour toute un point je n’ai rien contre bash qui est un très bon shell dont je suis loin de manier les subtilités. De même pour ksh d’ailleurs.

Je dis juste que j’adore zsh et je donne mes trucs et astuces sur lui. Les pointes que je peut distiller à l’encontre des autres shells sont des galéjades (mis à par quand il s’agit de fish).

Un des points qui me semble dommageable en bash c’est ça :

$ v='c_o_u-c_o-u.txt' $ echo ${${v%%.txt}//-/_} bash: ${${v%%.txt}//-/_} : mauvaise substitution
alors qu’en zsh :

% v='c_o_u-c_o-u.txt' % echo ${${v%%.txt}//-/_} c_o_u_c_o_u

Sauf que le man de zsh est découpé en plusieurs pages. Donc à jouer à qui a la plus grosse il faudrait regarder zshall et là je viens de vérifier le miens fait 15 228 lignes …

Mais bon. Il faut comprendre que zmv et zcp ne sont qu’un minuscule fragment des fonctionnalités builtin de zsh, il possède sont propre client ftp et un plus ou moins équivalent à netcat. Je ne me suis jamais servi ni de l’un ni de l’autre pour le moment.

Perso j’aime la diversité, alors zsh, bash, ksh etc …, c’est tant mieux ! J’avais bien compris que tu aimais zsh, j’ai jamais pensé que tu avais une dent contre bash

Yes pour le pb de substitution, I’m all right with you

Edit: sinon un seul % est suffisant (+ précis en fait)

######### zsh 4.3.10 v='c_o_u-c_o-u.txt' echo ${${v%.txt}//-/_} c_o_u_c_o_u
Edit : ces possibilités de substitutions, de copie étendues etc… peuvent inciter à passer à zsh. Bons arguments en sa faveur. +++

Par contre il est impossible de connaitre tous les shells, faut juste faire un choix (ou être capable de jongler avec les shell, c’est pas mon cas), parfois un peu arbitrairement, parfois à coup de pied au c… (j’évite les gros mots parce que je vais me faire gronder :mrgreen: , mais j’adore les grots mots :033 ) comme au boulot, où “l’autre là” il a décidé que tel shell me conviendra trés bien.(Edit : tant qu’on tombe pas sur un “shell” µsoft on peut considérer qu’on est un gros veinard )

J’ai pas vraiment choisi bash, mais bon il me convient …

A part ça, effectivement

man zshall

18 898 lignes ! gloup … bon, je reste sous bash !

Pas tout testé de ce que tu as mis + haut

Salut

Une petite astuce en béton armé pour zsh (je en sais pas si on peut la transcrire en bash):

alias find='noglob find' find /dossier -name *.jpg

(pour ceux qui n’auraient pas compris noglob permet de ne pas avoir de globbing sur la commande, donc il n’est plus la peine de protéger les *)

Il y a quelque temps j’avais trouvé un .zshrc plutot complet et bien documenté. Mais avec toute les astuce que tu donne je voi bien qu’il lui manque des chose qui me semble bien pratique.

[code]# Fichier de configuration principal de zsh

Formation Debian GNU/Linux par Alexis de Lattre

http://formation-debian.via.ecp.fr/

################

1. Les alias

################

Gestion du ‘ls’ : couleur & ne touche pas aux accents

alias ls=‘ls --classify --tabsize=0 --literal --color=auto --show-control-chars --human-readable’

Gestion du ‘grep’ : couleur

alias grep=‘grep --color=auto’

Demande confirmation avant d’écraser un fichier

alias cp='cp --interactive’
alias mv='mv --interactive’
alias rm=‘rm --interactive’

Raccourcis pour ‘ls’

alias l='ls’
alias ll='ls -l’
alias la='ls -a’
alias lla=‘ls -la’

Quelques alias pratiques

alias c='clear’
alias less='less --quiet’
alias s='cd …'
alias cd…='cd …'
alias df='df --human-readable’
alias du='du --human-readable’
alias md='mkdir’
alias rd='rmdir’
alias j=‘jobs’

Pour des stats reseaux

alias ports=“lsof -i -n -P” # Voir les process qui utilisent une connection internet
alias estab=“ss -p | grep STA” # Voir seulement les sockets établis
alias netstat80=“netstat -plan|grep :80|awk {‘print $5’}|cut -d: -f 1|sort|uniq -c|sort -nk 1” # nombre de connections sur le port 80 du serveur par IP
alias openports=“netstat -nape --inet” # Voir les ports ouverts
alias netpid=“netstat -tlnp” # Voir le port qui écoute avec le PID du process associ?
alias appson=“netstat -lantp | grep -i stab | awk -F/ ‘{print $2}’ | sort | uniq” # Voir une liste des noms de process qui utilisent une connection

#######################################

2. Prompt et définition des touches

#######################################

’ end-of-line # Endean termcap, est codifiee K1 (upper left
fibindkey 'eyboard) dans le /etc/termcap. En me referant a l’entree

correspondant a mon terminal (par exemple ‘linux’) dans ce fichier, je

gnome-terminal~, c’est la sequence de caracteres qui sera envoyee au

if [ “$COLORTERM” = “gnome-terminal” ]ement au shell : a chaque fois que
then rencontres telle sequence de caractere, tu dois faire telle action.

Correspondance touches-fonction spécifiquen zshzle".

bindkey ‘^[OH’ beginning-of-line # Home
bindkey ‘^[OF’ end-of-line # End
findkey ‘^A’ beginning-of-line # Home
bindkey ‘^E’ end-of-line # End

Titre de la fenêtre d’un xterm # Del

case $TERM inlete-char # Del
xterm*) overwrite-mode # Insert
precmd () {print -Pn “\e]0;%n@%m: %~\a”}
;;’ history-search-forward # PgDn
esac

Prompt couleur (la couleur n’est pas la même pour le root et

Gestion de la couleur pour ‘ls’ (exportation de LS_COLORS)

if [ -x /usr/bin/dircolors ]
thenport PS1="%{%}%T %{%}%n%{%}@%{%}%m %{%}%~%{%}%#%{%} “
if [ -r ~/.dir_colors ]
thenrt PS1=”%{%}%T %{%}%n%{%}@%{%}%m %{%}%~%{%}%#%{%} "
eval "dircolors ~/.dir_colors"
elif [ -r /etc/dir_colors ]
thenole linux, dans un screen ou un rxvt
eval "dircolors /etc/dir_colors“creen” -o “$TERM” = “rxvt” ]
else
eval "dircolors"ches-fonction spécifique
findkey ‘’ beginning-of-line # Home
fibindkey ‘’ end-of-line # End
fi

###########################################

3. Options de zsh (cf ‘man zshoptions’)

###########################################

Correspondance touches-fonction spécifique

Je ne veux JAMAIS de beeps

unsetopt beep
unsetopt hist_beep
unsetopt list_beep

>| doit être utilisés pour pouvoir écraser un fichier déjà existant ;

le fichier ne sera pas écrasé avec ‘>’

#unsetopt clobber

Ctrl+D est équivalent à ‘logout’

unsetopt ignore_eof

Affiche le code de sortie si différent de ‘0’

setopt print_exit_value

Demande confirmation pour ‘rm *’

unsetopt rm_star_silent

#Ignore la casse pour les commandes de base (ls, cd, etc)
setopt no_case_glob

Correction orthographique des commandes

Désactivé car, contrairement à ce que dit le “man”, il essaye de

corriger les commandes avant de les hasher

#setopt correct

Si on utilise des jokers dans une liste d’arguments, retire les jokers

qui ne correspondent à rien au lieu de donner une erreur

setopt nullglob

Schémas de complétion

- Schéma A :

1ère tabulation : complète jusqu’au bout de la partie commune

2ème tabulation : propose une liste de choix

3ème tabulation : complète avec le 1er item de la liste

4ème tabulation : complète avec le 2ème item de la liste, etc…

-> c’est le schéma de complétion par défaut de zsh.

Schéma B :

1ère tabulation : propose une liste de choix et complète avec le 1er item

de la liste

2ème tabulation : complète avec le 2ème item de la liste, etc…

Si vous voulez ce schéma, décommentez la ligne suivante :

#setopt menu_complete

Schéma C :

1ère tabulation : complète jusqu’au bout de la partie commune et

propose une liste de choix

2ème tabulation : complète avec le 1er item de la liste

3ème tabulation : complète avec le 2ème item de la liste, etc…

Ce schéma est le meilleur à mon goût !

Si vous voulez ce schéma, décommentez la ligne suivante :

#unsetopt list_ambiguous

(Merci à Youri van Rietschoten de m’avoir donné l’info !)

Options de complétion

Quand le dernier caractère d’une complétion est ‘/’ et que l’on

tape ‘espace’ après, le ‘/’ est effaçé

setopt auto_remove_slash

Ne fait pas de complétion sur les fichiers et répertoires cachés

unsetopt glob_dots

Traite les liens symboliques comme il faut

setopt chase_links

Quand l’utilisateur commence sa commande par ‘!’ pour faire de la

complétion historique, il n’exécute pas la commande immédiatement

mais il écrit la commande dans le prompt

setopt hist_verify

Si la commande est invalide mais correspond au nom d’un sous-répertoire

exécuter ‘cd sous-répertoire’

setopt auto_cd

L’exécution de “cd” met le répertoire d’où l’on vient sur la pile

setopt auto_pushd

Ignore les doublons dans la pile

setopt pushd_ignore_dups

N’affiche pas la pile après un “pushd” ou “popd”

setopt pushd_silent

“pushd” sans argument = “pushd $HOME”

setopt pushd_to_home

Les jobs qui tournent en tâche de fond sont nicé à ‘0’

unsetopt bg_nice

N’envoie pas de “HUP” aux jobs qui tourent quand le shell se ferme

unsetopt hup

###############################################

4. Paramètres de l’historique des commandes

###############################################

Nombre d’entrées dans l’historique

export HISTORY=1000
export SAVEHIST=1000

Fichier où est stocké l’historique

export HISTFILE=$HOME/.history

Ajoute l’historique à la fin de l’ancien fichier

#setopt append_history

Chaque ligne est ajoutée dans l’historique à mesure qu’elle est tapée

setopt inc_append_history

Ne stocke pas une ligne dans l’historique si elle est identique à la

précédente

setopt hist_ignore_dups

Supprime les répétitions dans le fichier d’historique, ne conservant

que la dernière occurrence ajoutée

#setopt hist_ignore_all_dups

Supprime les répétitions dans l’historique lorsqu’il est plein, mais

pas avant

setopt hist_expire_dups_first

N’enregistre pas plus d’une fois une même ligne, quelles que soient

les options fixées pour la session courante

#setopt hist_save_no_dups

La recherche dans l’historique avec l’éditeur de commandes de zsh ne

montre pas une même ligne plus d’une fois, même si elle a été

enregistrée

setopt hist_find_no_dups

###########################################

5. Complétion des options des commandes

###########################################

zstyle ‘:completion:’ matcher-list ‘’ 'm:{a-z}={A-Z}'
zstyle ':completion:
’ max-errors 3 numeric
zstyle ‘:completion:*’ use-compctl false

autoload -U compinit
compinit[/code]

A quoi ressemble ton .zshrc MisterFreez ?

Pour simplifié je viens de mettre mes fichiers sur la forge google :

code.google.com/p/zsh-divers/source/browse/