Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
[howto] zsh
View unanswered posts
View posts from last 24 hours

 
Reply to topic    Gentoo Forums Forum Index French
View previous topic :: View next topic  
Author Message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Dec 21, 2006 11:31 am    Post subject: [howto] zsh Reply with quote

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 :
Code:
emerge zsh


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 :
Code:
alias -s


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:
Code:
ls **/*.txt


Le même en s'assurant qu'il s'agit bien de fichier et non de répertoire :
Code:
ls **/*.txt(.)


Le même cherchant indifféremment dans les fichiers cachés ou non :
Code:
 ls **/*.txt(D.)


Lister tous les répertoires vides :
Code:
print -rl **/*(D/^F)

ou
Code:
ls **/*(D/^F)


Liste tous les fichiers vides :
Code:
ls **/**(D.L0))


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
View user's profile Send private message
galerkin
Tux's lil' helper
Tux's lil' helper


Joined: 04 Mar 2006
Posts: 115
Location: /dev/toulouse

PostPosted: Thu Dec 21, 2006 12:52 pm    Post subject: Reply with quote

Ca m'a l'air très complet

Merci pour cette contribution

je m'en vais tester de ce pas...
Back to top
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Dec 21, 2006 12:59 pm    Post subject: Reply with quote

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
View user's profile Send private message
kwenspc
Advocate
Advocate


Joined: 21 Sep 2003
Posts: 4954

PostPosted: Thu Dec 21, 2006 1:54 pm    Post subject: Reply with quote

MARCIII!!! Vais me mettre à zsh tiens piske c'est à la mode :P

(non serieux ça a l'air sympa)
_________________
membre officieux du SAV Ati GEntoo
Back to top
View user's profile Send private message
davidou2a
Guru
Guru


Joined: 15 Dec 2006
Posts: 574
Location: Ajaccio

PostPosted: Thu Dec 21, 2006 2:13 pm    Post subject: Reply with quote

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
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Thu Dec 21, 2006 5:47 pm    Post subject: Reply with quote

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
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Thu Dec 21, 2006 7:00 pm    Post subject: Reply with quote

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
View user's profile Send private message
Scullder
Guru
Guru


Joined: 16 Mar 2006
Posts: 466
Location: France

PostPosted: Mon Dec 25, 2006 1:05 pm    Post subject: Reply with quote

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 :

Code:
autoload zkbd
zkbd


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 8)
_________________
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
View user's profile Send private message
adjaxio
n00b
n00b


Joined: 06 Mar 2006
Posts: 54

PostPosted: Fri Feb 09, 2007 11:25 am    Post subject: Reply with quote

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
View user's profile Send private message
truc
Advocate
Advocate


Joined: 25 Jul 2005
Posts: 3199

PostPosted: Fri Feb 09, 2007 11:43 am    Post subject: Reply with quote

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
View user's profile Send private message
Bapt
Veteran
Veteran


Joined: 14 Apr 2003
Posts: 1152
Location: Paris

PostPosted: Mon Feb 11, 2008 1:22 pm    Post subject: Reply with quote

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
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index French All times are GMT
Page 1 of 1

 
Jump to:  
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