logo
           ANDESI                      BREVES           

Trucs et astuces

Table des matières

1  Activer la complétion pour Zsh

1.1  Introduction

Zsh est un « interpréteur de commande UNIX (ou shell) » (# man zsh) proposant de nombreux avantages par rapport à Bash qui est le shell par défaut sur Debian GNU/Linux. En attendant une introduction de zsh sur http://www.andesi.org/, vous pouvez toujours lire le FAQ en Anglais de zsh : http://www.b2pi.com/zsh/FAQ/ qui permettra de répondre à vos éventuelles questions. Ce court article explique donc l'installation de Zsh et comment activer la complétion automatique sur le paquet Debian de zsh qui n'est pas mis par défaut sur Debian GNU/Linux.

1.2  Installer zsh

Nous allons installer zsh avec l'aide de apt-get et changer le shell par défaut de l'utilisateur root. Nous allons ensuite vérifier que zsh est bien notre shell par défaut grâce à la variable d'environnement $SHELL.

# echo $SHELL
/bin/bash
# apt-get install zsh
Reading Package Lists... Done
Building Dependency Tree... Done
The following NEW packages will be installed:
    zsh
0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 1676kB of archives.
After unpacking 4985kB of additional disk space will be used.
Get:1 http://192.168.0.1 unstable/main zsh 4.0.7-5 [1676kB]
Fetched 1676kB in 0s (4041kB/s)
Reading changelogs... Done
Preconfiguring packages ...
Selecting previously deselected package zsh.
(Reading database ... 150836 files and directories currently installed.)
Unpacking zsh (from .../archives/zsh
_4.0.7-5_i386.deb) ...
Setting up zsh (4.0.7-5) ...
# chsh
Changing the login shell for root
Enter the new value, or press return for the default
    Login Shell
[/bin/bash]:/bin/zsh
# su -
# echo
$SHELL
/bin/zsh


Voilà le shell de l'utilisateur root est désormais zsh. Il ne nous reste plus qu'à activer la complétion.

1.3  Activer la complétion

Par défaut, la complétion pour zsh n'est pas activée. Il faut donc modifier le fichier ~/.zshrc dans le répertoire de l'utilisateur, ou bien dans le fichier /etc/zshrc. Le script zsh compinstall automatise l'activation de la complétion. Il se trouve dans le répertoire /usr/share/zsh/<VERSION DE ZSH>/functions/Completion par défaut sur Debian GNU/Linux.

# cd /usr/share/zsh/`zsh --version | awk -F" " '{print $2}'`/functions/Completion
# source compinstall

I haven't found any existing completion definitions.
If you have some already defined by compinstall, edit the name of the
file where these can be found. Note that this will only work if they
are exactly the form in which compinstall inserted them. If you leave
the line as it is, or empty, I won't search.
file> /root/.zshrc
Starting a new completion configuration from scratch.
This will be written to the new file /root/.zshrc.
Note that you will be given a chance to save the new setup
somewhere else at the end.
--- Hit newline to continue or `q' to exit without saving ---

d=/usr/share/zsh/4.0.7/functions/Zle
compdir=/usr/share/zsh/4.0.7/functions/Completion
subdirs=1
lines=''
Completion directories /usr/share/zsh/4.0.7/functions/Completion/*
are already in your
$fpath, good.
--- Hit newline to continue or `q' to exit without saving ---

            *** compinstall: main menu ***
Note that hitting `q' in menus does not abort the set of changes from
lower level menus. However, quitting at top level will ensure that
noting at all is actually written out.

1.  Completers: choose completion behaviour for tasks such as
    approximation, spell-checking, expansion.

2.  Matching control: set behaviour for case-insensitive matching, extended (partial-word) matching and substring matching.

3.  Styles for changing the way completions are displayed and inserted.

4.  Styles for particular completions.

c.  Change context (plus more information on contexts).

q.  Return without saving.
0.  Save and exit.

--- Hit choice ---


Nous allons sélectionner les modules de complétion en appuyant sur les touches correspondantes aux modules que nous désirons utiliser.

            *** compinstall: completer menu ***

Current context: :completion:*

The following completers are available. Those marked `(*)' are already
set for the context shown above. If none are selected, the completers
will not be set for this context at all.

1. (*) Basic completion.
2. (*) Approximate completion: completion with correction of existing word.
3. (*) Correction: correct existing word, no completion.
4. (*) Expansion: use globbing and parameter substitution, if possible.

o.     Set options for the completers above.
m.     Set completers that modify the behaviour of the four main ones above.
q.     Return without saving.
0.     Done setting completers.

--- Hit selection --- 1 2 3 4


Pour avoir la complétion sur les paquets, il suffit de choisir Basic completion. Après avoir choisi le comportement de zsh, il faut retourner au menu principal à l'aide de la touche '0'. Et sauvegarder son choix par cette même touche '0'.

--- Hit choice --- 0 output=''
Save new settings to /root/.zshrc? y

Successfully added compinstall lines to /root/.zshrc.
Set new styles for immediate use? n


Zsh doit être relancé pour que la nouvelle configuration soit prise en compte.

# zsh
# apt-get install ppp
ppp-pam         ppp-sh4-cross    pppdcapiplugin     pppoeconf
ppp-sh3-cross   ppp-udeb         pppoe              pppstatus


Comme vous pouvez le voir, zsh complète tout les paquets qui commencent par ppp et qui ne sont pas installé sur mon système. Il peut effectuer des complétions sur beaucoups d'autres choses comme les pages de manuels, mais je vous laisse le découvrir par vous même.

Un dernière petite précision à propos du script compinstall. Celui-ci ajoute les lignes suivantes dans le fichier /root/.zshrc.

# The following lines were added by compinstall

zstyle ':completion:*' completer
_expand _complete _correct _approximate
zstyle :compinstall filename '/root/.zshrc'

autoload -U compinit
compinit
# End of lines added by compinstall


Le script compinstall se trouve dans le PATH de zsh, et il est possible de modifier le comportement du compléteur à n'importe quel moment. Vous pouvez copier le fichier de configuration .zshrc de l'utilisateur root dans le fichier de configuration global de zsh pour que chaque utilisateur qui l'utilise bénéficie de la complétion.
# cp /root/.zshrc /etc/zsh/zshrc

Vous pouvez également copier ce fichier dans les répertoires de tous les utilisateurs de votre système, si vos groupes correspondent aux noms d'utilisateur. Par exemple, si l'utilisateur toto appartient au groupe toto, alors vous pouvez tapez ceci pour automatiser la copie de ce fichier dans tous les répertoires présent dans /home/ (notez cependant que cette ligne de commande est vraiment basique car elle ne vérifie pas que le groupe et l'utilisateur existe vraiment) :
# for i in `ls /home | egrep "[^ftp,^lost+found]"` ; do cp /root/.zshrc \
/home/
$i/ && chown $i. /home/$i/.zshrc ; done

Une autre petite astuce pour rendre un peu plus convivial zsh : modifier « l'apparence » du prompt (section PROMPT EXPANSION du la page de manuel zshmic) qui ressemble à ça par défaut si le nom de votre machine est exemple : exemple# . Pour cela éditer le fichier ~/.zshrc ou le fichier /etc/zshrc, et rajouté la ligne suivante : PROMPT='%n@%m%:[%~]%# '. Maintenant votre prompt devrait ressembler à quelque chose comme ça : root@samy[~]# , n'oubliez pas de taper : # source ~/.zshrc pour que la modification soit prise en compte immédiatement.

1.4  Ressources

Je vous conseille vivement de lire les pages de manuels de zsh qui sont très complète (zsh, zshcompctl, zshcontrib, zshmodules, zshzftpsys, zshcompsys, zshexpn, zshoptions, zshzle, zshbuiltins, zshcompwid, zshmisc, zshparam) ou la page de manuel rassemblant toutes les autres : # man zshall. Le site officiel contient également quelques documents intéressants. Pour personnaliser votre prompt encore un peu plus, cette adresse devrait vous convenir : http://aperiodic.net/phil/prompt/.

Auteur de cet astuce : Christophe Nowicki (nowick at epita dot fr) et Arnaud Fontaine (arnaud at andesi.org dot org)

[Format Latex] [Format PDF] [Format HTML seule]




   Debian    Valid CSS!