View previous topic :: View next topic |
Author |
Message |
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Dec 21, 2006 11:31 am Post subject: [howto] zsh |
|
|
Suite au débat https://forums.gentoo.org/viewtopic-t-523853.html je me suis rendu compte que beaucoup de gens souhaitent essayer zsh, je me suis donc dit qu'un petit howto serait le bienvenu
Tout décrire ici serait trop long, mais ce HOWTO devrait donner un aperçu des possibilités des ZSH. En complément, je vous conseil d'aller voir : ZSH LOVERS, vous pouvez aussi consulté la très grosse documentation ZSH : . Vous pouvez aussi récupérer ma configuration de zsh ici (Attention aux droits de .zsh/* qui doivent appartenir au user) Code: | chown -R user:grp .zsh* |
INTRODUCTION
zsh est un Shell au même titre que bash, csh ou ksh.
Les particularités principales de zsh sont les suivantes :
- Complétion très évoluée
- Complétion programmable
- Support mimes
- Modes de compatibilité sh, csh, ksh, etc.
- Fonctions "built-in" très nombreuses
- Nombreux modules
ZSH est libre (sous licence BSD modifiée).
INSTALLATION
En utilisant portage :
Attention si vous êtes en stable, gentoo propose la version 4.2.5 qui ne supporte pas l'UTF-8, en ~arch la version de développement (très stable) de zsh supportant l'UTF-8 est disponible : 4.3.2
Je vous recommande chaudement les versions supérieures à la 4.3
DETAIL DES USE FLAGS
zsh propose les use flags (version >= 4.3.2) :
- caps : permet de gérer les capacités POSIX.1e via le module interne zsh/cap (je ne sais pas de quoi il s'agit)
- maildir : zsh permet de vérifier la présence de mail (localement) ce use flag offre le support du format maildir
- pcre : ajoute le support des expressions régulières à ZSH via le module zsh/pcre
- unicode active le support de l'unicode
COMPLETION GENTOO
Pour activer la complétion des commandes gentoo (portage, gentoolkit, portage-utils et quelques autres) il faut installer zsh-completion :
Code: | emerge zsh-completion |
Encore une fois je recommande d'utiliser la version ~arch beaucoup plus à jour et stable.
COMPLETION
ZSH dispose d'un système de complétion très avancé permettant aussi bien de faire de la complétion sur les noms des commandes, mais aussi sur leurs arguments, fichiers supportés etc.
Activation de la complétion :
Code: | autoload -U compinit
compinit |
Exemples de tuning de la complétion :
- Pour que la commande cd offre la complétion sur les répertoires locaux pour les répertoires du cdpath :
Code: | zstyle ':completion:*:*:cd:*' tag-order local-directories path-directories |
Pour disposer d'un menu pour la complétion et pouvoir sélectionner avec les flèches du clavier :
Code: | zstyle ':completion:*' menu select=2
zstyle ':completion:*' select-prompt %SScrolling active: current selection at %p%s |
Eviter de reproposer un élément déjà proposé précédemment lors de la complétion pour les commandes rm, cp, mv :
Code: | zstyle ':completion:*:rm:*' ignore-line yes
zstyle ':completion:*:mv:*' ignore-line yes
zstyle ':completion:*:cp:*' ignore-line yes
|
Aller récupérer l'ensemble des hosts dans le fichier known_host de ssh pour permettre la completions aux programmes qui demande un host (genre ssh, telnet, ...)
Code: | local _myhosts
if [ -d ~/.ssh ]; then
if [ -f ~/.ssh/known_hosts ];then
_myhosts=(${=${${(f)"$(<$HOME/.ssh/known_hosts)"}%%[# ]*}//,/ })
fi
fi
zstyle ':completion:*' hosts $_myhosts |
EDIT : Si il manque des fonctions de completions à zsh et qu'elles sont présentent pour bash, il faut savoir que zsh supporte parfaitement la completion bash, voici la procédure à suivre :
Activation :
Code: | autoload -U bashcompinit
bashcompinit |
désormai il suffit de sourcer les fonctions de completions bash pour qu'elles fonctionnent sous ZSH
MIMES
ZSH supporte les mimes et permet ainsi de déterminer le programme souhaité pour l'ouverture d'un type de fichier donné comme le ferait un explorateur de fichier.
Activation :
Code: | autoload -U zsh-mime-setup
autoload -U zsh-mime-handler
zsh-mime-setup |
Cette fonction va aller récupérer les informations dans /etc/mime.types, ~/.mime.types, /etc/mailcap et ~/.mailcap
Pour rajouter de nouveaux fichiers mailcap (par exemple /usr/local/etc/mailcap) :
Code: |
zstyle ':mime:*' mailcap ~/.mailcap /usr/local/etc/mailcap
|
Pour rajouter manuellement des associations de fichiers, deux possibilités :
Code: | zstyle ':mime:.txt:' handler less %s |
ou
Code: | alias -s txt="less" |
Pour lister toutes les associations disponibles :
La fonction pick-web-browser est à disposition pour permettre de choisir un ordre de préférence sur le navigateur web :
Code: | autoload -U pick-web-browser
zstyle ':mime:*' x-browsers firefox elinks
alias -s html=pick-web-browser |
FONCTIONS INTERNES
ZSH dispose de très nombreuses fonctions internes.
Activation :
Code: | autoload -U zfinit
zfinit |
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.
MODULES INTERNES
Pour charger un module :
Code: | 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) : chgrp, chown, ln, mkdir, mv, rm, rmdir, sync
- 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)
- zftp : un client ftp natif
- zpty permet de créer un pty virtuel et de lire/écrire ce qui se passe dedans (à la expect)
GLOBBING & DIVERS
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:
Le même en s'assurant qu'il s'agit bien de fichier et non de répertoire :
Le même cherchant indifféremment dans les fichiers cachés ou non :
Lister tous les répertoires vides :
Code: | print -rl **/*(D/^F) |
ou
Liste tous les fichiers vides :
Lister les 10 fichiers les plus gros :
Code: | 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 " ".
Code: | zmv '(*).mkv' '${${(LC)1//./ }//_/ }.mkv' |
Last edited by Bapt on Thu Dec 21, 2006 4:50 pm; edited 1 time in total |
|
Back to top |
|
|
galerkin Tux's lil' helper
Joined: 04 Mar 2006 Posts: 115 Location: /dev/toulouse
|
Posted: Thu Dec 21, 2006 12:52 pm Post subject: |
|
|
Ca m'a l'air très complet
Merci pour cette contribution
je m'en vais tester de ce pas... |
|
Back to top |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Dec 21, 2006 12:59 pm Post subject: |
|
|
ZSH est très complet mais ce howto est très très light comparé à ce que te permet ZSH. mais je ne sais pas comment en mettre plus sans le rendre trop lourd. |
|
Back to top |
|
|
kwenspc Advocate
Joined: 21 Sep 2003 Posts: 4954
|
Posted: Thu Dec 21, 2006 1:54 pm Post subject: |
|
|
MARCIII!!! Vais me mettre à zsh tiens piske c'est à la mode
(non serieux ça a l'air sympa) _________________ membre officieux du SAV Ati GEntoo |
|
Back to top |
|
|
davidou2a Guru
Joined: 15 Dec 2006 Posts: 574 Location: Ajaccio
|
Posted: Thu Dec 21, 2006 2:13 pm Post subject: |
|
|
Joli tuto mais je reste sur Csh et bash par contre me parlez pas de KornShell (ksh)
*** Envie de vomir ^^ *** _________________ L'enfer je connais, il s'appelle Windows... |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Thu Dec 21, 2006 5:47 pm Post subject: |
|
|
juste comme ça, pour ceux qui installeront 'zsh-completion' , dans une optique de non polution du world, je propose, de n'emerger que ce paquet les dépendances deront le reste.
Sinon, ça a l'air très sympa, encore une fois merci
EDIT: aaahahhhh mon c-a-a dans screen ne marche plus!! j'suppose qu'il doit y avoir un moyen de le retrouver? _________________ The End of the Internet! |
|
Back to top |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Thu Dec 21, 2006 7:00 pm Post subject: |
|
|
truc wrote: | juste comme ça, pour ceux qui installeront 'zsh-completion' , dans une optique de non polution du world, je propose, de n'emerger que ce paquet les dépendances deront le reste.
Sinon, ça a l'air très sympa, encore une fois merci
EDIT: aaahahhhh mon c-a-a dans screen ne marche plus!! j'suppose qu'il doit y avoir un moyen de le retrouver? |
Je ne connaissais pas j'ai jamais fait gaffe à ça il doit y avoir moyen de corriger ça.
SI c'est pour revenir au début de la ligne la touche home fait très bien l'affaire |
|
Back to top |
|
|
Scullder Guru
Joined: 16 Mar 2006 Posts: 466 Location: France
|
Posted: Mon Dec 25, 2006 1:05 pm Post subject: |
|
|
Cool ce tutos, moi aussi je donne ma petite astuce. =)
En fait, après emerge de zsh et configuration, j'avais toujours des touches mortes, qui répondaient par ~, comme les touches del, ins, home, page up, page down, end. Pour remédier à ce problème on peut utiliser zkbd.
Dans le .zshrc, ajoutez ça :
Relancez un terminal. Vous allez devoir appuyer sur les touches du clavier que le script vous demande.
Le script crée ensuite un fichier avec les définitions des touches : ~/.zkbd/$TERM-$VENDOR-$OSTYPE
Vous pouvez le lire, c'est un tableau qu'on va réutiliser juste après.
Dans votre .zshrc, supprimez les deux lignes autoload zkbd et zkbd.
Ajoutez :
Code: | source ~/.zkbd/$TERM-$VENDOR-$OSTYPE |
On peut ensuiter lier les touches à des actions ( http://www.cs.elte.hu/zsh-manual/zsh_14.html ), comme ça par exemple :
Code: | [[ -n ${key[Left]} ]] && bindkey "${key[Left]}" backward-char
[[ -n ${key[Right]} ]] && bindkey "${key[Right]}" forward-char
[[ -n ${key[End]} ]] && bindkey "${key[End]}" vi-end-of-line
[[ -n ${key[Home]} ]] && bindkey "${key[Home]}" vi-beginning-of-line
[[ -n ${key[Insert]} ]] && bindkey "${key[Insert]}" overwrite-mode
[[ -n ${key[Delete]} ]] && bindkey "${key[Delete]}" delete-char |
Sur chaque ligne, on teste l'existence du champ du tableau, et si il existe, on lie la touche avec une action en utilisant bindkey.
Il y a d'autres moyens, mais c'est la solution la plus propre que j'ai trouvée
ZSH vaincra _________________ Linux gentoo 2.6.18-ck1-r2 #1 PREEMPT Fri Nov 17 01:37:56 CET 2006 x86_64 AMD Athlon(tm) 64 Processor 3000+ AuthenticAMD GNU/Linux |
|
Back to top |
|
|
adjaxio n00b
Joined: 06 Mar 2006 Posts: 54
|
Posted: Fri Feb 09, 2007 11:25 am Post subject: |
|
|
Bonjour,
Merci pour ce howto.
J'aurai une question peut être un peut con mais comment fait ton pour le mettre part défaut (sur un serveur connections SSH) ?
merci |
|
Back to top |
|
|
truc Advocate
Joined: 25 Jul 2005 Posts: 3199
|
Posted: Fri Feb 09, 2007 11:43 am Post subject: |
|
|
tu eux le changer dans /etc/passwd normalement, sinon, tu peux aussi te servir de chsh (pour changeshell si je n'm'abuse..) pour ça _________________ The End of the Internet! |
|
Back to top |
|
|
Bapt Veteran
Joined: 14 Apr 2003 Posts: 1152 Location: Paris
|
Posted: Mon Feb 11, 2008 1:22 pm Post subject: |
|
|
A la demande de plusieurs, voici, ma configuration mise à jour :
http://baptux.free.fr/zshconf-20080211.tar.bz2
Une fois décompressée n'oubliez pas de changer les droits pour qu'ils appartiennent votre utilisateur.
Ce que l'on retrouve dans la conf :
.zshrc : la conf zsh basique : les différentes options : setopt et unsetopt, les bindkeys, et l'activation du prompt.
.zshalias : liste des alias non suffix (ie qui ne sont pas de type mimes)
.zshcomplete : configuration et activation de la completion
.zshfunctions : activation de certaines des fonctions : datetime, mime,
.zshhash : gestion des hash (bookmark sur le FS)
.zshmimes : gestion des types mimes, et des alias suffix)
.zsh/functions/prompt_bapt_setup : mon prompt
.zsh/functions/src : une fonction permettant de recharger la conf en cas de modif et de la recompiler.
PS: j'ai commenté ce qui me semblait intéressant, néhsitez pas à me dire ce qui manque de commentaires. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|