zsh : utilisation interactive
Bruno Bonfils, <asyd@asyd.net>
mardi 5 mai 2009
Sommaire
mardi 5 mai 2009
Sommaire
Introduction
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
Quelques astuces
mardi 5 mai 2009
Sommaire
Introduction
Organisation du shell, outils
La complétion ZSH
ZLE (zsh line editor)
Quelques astuces
Les outils zsh
mardi 5 mai 2009
Introduction
Ma vision du shell
mardi 5 mai 2009
Introduction
Ma vision du shell
Définition : un shell est un programme
fournissant une interface avec les
utilisateurs
mardi 5 mai 2009
Introduction
Ma vision du shell
Définition : un shell est un programme
fournissant une interface avec les
utilisateurs
La productivité fournie par un outil en ligne
de commande n’a jamais été égalée par des
applications graphiques (pour une
utilisation générique)
mardi 5 mai 2009
Organisation / Outils
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
screen
mardi 5 mai 2009
Organisation / Outils
Respecter une hiérarchie dans votre
répertoire utilisateur
Un nombre fini de répertoire
Des noms explicites
Utilisation d’un SCM
Des outils annexes indispensables
screen
dict
mardi 5 mai 2009
Exemple d’organisation
archives
bin
docs
download
etc
tmp
tools
work
Respecter cette hiérarchie sur l’ensemble de vos comptes/ordinateurs vous permet une plus grande productivité.
mardi 5 mai 2009
Un mot sur dict
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant
d’interroger un ensemble de dictionnaires
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant
d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant
Acronyms)
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant
d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant
Acronyms)
GCide, dictionnaire anglais
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant
d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant
Acronyms)
GCide, dictionnaire anglais
Et de nombreux autres
mardi 5 mai 2009
Un mot sur dict
dict est un outil client/serveur permettant
d’interroger un ensemble de dictionnaires
VERA (Virtual Entity of Relevant
Acronyms)
GCide, dictionnaire anglais
Et de nombreux autres
% dict bgp
BGP
Border Gateway Protocol (RFC 1267/1771, IP)
mardi 5 mai 2009
Un mot sur screen
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
Hardstatus/title bar
mardi 5 mai 2009
Un mot sur screen
Multiplexage de terminaux
Découpage (split) des vues
Enregistrement, recherche
Copier/Coller sans souris
Hardstatus/title bar
Très utile en relation avec zsh !
mardi 5 mai 2009
Un mot sur screen
Title bar
Hardstatus bar
mardi 5 mai 2009
Un mot sur screen
RPS1
Dynamique
Title bar
Hardstatus bar
mardi 5 mai 2009
Un mot sur screen
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de
rendre dynamique le contenu des barres de
titre et de statut
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de
rendre dynamique le contenu des barres de
titre et de statut
ssh, telnet vont définir le nom d’hôte
dans la barre de statut
mardi 5 mai 2009
Un mot sur screen
Grâce à des fonctions, il est possible de
rendre dynamique le contenu des barres de
titre et de statut
ssh, telnet vont définir le nom d’hôte
dans la barre de statut
heure, commande et chemin en cours
dans la barre de titre
mardi 5 mai 2009
La complétion zsh
mardi 5 mai 2009
La complétion zsh
Les concepts
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
les zstyles, où comment configurer la
complétion en fonction de ses envies
mardi 5 mai 2009
La complétion zsh
Les concepts
Les widgets
les zstyles, où comment configurer la
complétion en fonction de ses envies
Définir/étendre la complétion
mardi 5 mai 2009
Les concepts
mardi 5 mai 2009
Les concepts
Écrire des fonctions de complétion très
avancées, tout en pensant à la réutilisation
mardi 5 mai 2009
Les concepts
Écrire des fonctions de complétion très
avancées, tout en pensant à la réutilisation
Une configuration très fine, pouvant
contrôler le comportement de la
complétion
mardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur
les commandes
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur
les commandes
Mais zsh propose bien plus :
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur
les commandes
Mais zsh propose bien plus :
Une complétion sur les arguments
mardi 5 mai 2009
La complétion
Tout le monde connais la complétion sur
les commandes
Mais zsh propose bien plus :
Une complétion sur les arguments
Une complétion contextuelle (différente
en fonction de l’argument précédent par
exemple)
mardi 5 mai 2009
Quelques exemples : apt-get
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install,
update, etc.)
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install,
update, etc.)
complétion de la liste des paquets
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install,
update, etc.)
complétion de la liste des paquets
Gestion du statut du paquet (installé,
disponible)
mardi 5 mai 2009
Quelques exemples : apt-get
complétion des sous commandes (install,
update, etc.)
complétion de la liste des paquets
Gestion du statut du paquet (installé,
disponible)
Utilisation d’un cache
mardi 5 mai 2009
Quelques exemples :
configure
mardi 5 mai 2009
Quelques exemples :
configure
Lorsque l’on compile un logiciel à partir
des sources, s’il utilise les autotools, cela
commence généralement par un ./configure
--help | less pour connaître la liste des
options disponibles (surtout celles
spécifiques)
mardi 5 mai 2009
Quelques exemples :
configure
Lorsque l’on compile un logiciel à partir
des sources, s’il utilise les autotools, cela
commence généralement par un ./configure
--help | less pour connaître la liste des
options disponibles (surtout celles
spécifiques)
Avec zsh, passez vous de cette étape,
utiliser juste ./configure --<tab>
mardi 5 mai 2009
Autres exemples
mardi 5 mai 2009
Autres exemples
pour la commande man, zsh complète non
seulement la liste des pages de manuels,
mais aussi la liste des modules perl
(documentation en pod)
mardi 5 mai 2009
Autres exemples
pour la commande man, zsh complète non
seulement la liste des pages de manuels,
mais aussi la liste des modules perl
(documentation en pod)
pour les options ao/vo de mplayer, la
définition de la liste est dynamique
mardi 5 mai 2009
Les widgets
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions
réutilisables
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions
réutilisables
_users _groups
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions
réutilisables
_users _groups
_hosts
mardi 5 mai 2009
Les widgets
Quelques exemples de fonctions
réutilisables
_users _groups
_hosts
_services
mardi 5 mai 2009
approximate / correct
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour
corriger automatiquement des erreurs de
frappe
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour
corriger automatiquement des erreurs de
frappe
Erreur de casse (cd /Etc)
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour
corriger automatiquement des erreurs de
frappe
Erreur de casse (cd /Etc)
L’inversion de caractères (banane,
abnane)
mardi 5 mai 2009
approximate / correct
zsh dispose de fonctionnalités pour
corriger automatiquement des erreurs de
frappe
Erreur de casse (cd /Etc)
L’inversion de caractères (banane,
abnane)
Des caractères manquant, en trop
(ricard, richard)
mardi 5 mai 2009
les zstyle
Les zstyle permettent de contrôler de
manière très fine le comportement de la
complétion
Permet de définir des comportements à
plusieurs niveaux
global
par commande
par argument
mardi 5 mai 2009
Exemples de zstyle
mardi 5 mai 2009
Exemples de zstyle Commande
pour obtenir la liste
des processus
zstyle ':completion:*:processes' command
'ps -au$USER'
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command
'ps -au$USER' Active le cache
zstyle ':completion:*' use-cache on
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command
'ps -au$USER'
Ignore le
zstyle ':completion:*' use-cache on répertoire parent
zstyle ':completion:*' ignore-parents parent
pwd
mardi 5 mai 2009
Exemples de zstyle
zstyle ':completion:*:processes' command
'ps -au$USER'
zstyle ':completion:*' use-cache on
zstyle ':completion:*' ignore-parents parent de
Utilise l’heure
pwd modification comme
critère de tri pour vi
zstyle ':completion:*:*:vi*:*' file-sort
modification
Dans ce dernier cas, le comportement
est surchargé pour une commande !
mardi 5 mai 2009
Étendre la complétion
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
compdef
mardi 5 mai 2009
Étendre la complétion
Comportement par défaut
compdef
zstyle
mardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de
fonction de complétion, le widget _files est
utilisé
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de
fonction de complétion, le widget _files est
utilisé
Mais il est possible de surcharger ce
comportement
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de
fonction de complétion, le widget _files est
utilisé
Mais il est possible de surcharger ce
comportement
Un script maison attendant un nom
d’hôte en argument
mardi 5 mai 2009
La complétion
Pour une application dont il n’existe pas de
fonction de complétion, le widget _files est
utilisé
Mais il est possible de surcharger ce
comportement
Un script maison attendant un nom
d’hôte en argument
% compdef _hosts myscript
mardi 5 mai 2009
La complétion
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un
pattern matching afin de limiter la
complétion sur les fichiers
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un
pattern matching afin de limiter la
complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un
pattern matching afin de limiter la
complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'
mardi 5 mai 2009
La complétion
Il est également possible de spécifier un
pattern matching afin de limiter la
complétion sur les fichiers
zstyle ':completion:*:*:lintian:*' file-patterns '*(-/):directories *.deb'
zstyle ':completion:*:*:gqview:*' file-patterns '*(-/):directories :(#i)*.(png|jpeg|jpg):all-files'
zstyle ':completion:*:cd:*' ignored-patterns '(*/)#CVS'
mardi 5 mai 2009
ZLE, zsh line editor
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
vi (mode commande, mode insert)
mardi 5 mai 2009
ZLE, zsh line editor
Plusieurs modes possibles
emacs
vi (mode commande, mode insert)
Extensible en écrivant ses propres widgets
mardi 5 mai 2009
Quelques bindkeys utiles
mardi 5 mai 2009
Quelques bindkeys utiles
Permet de parcourir
les anciens appels à une
commande donnée
history-search-{back|for}ward
mardi 5 mai 2009
Quelques bindkeys utiles
history-search-{back|for}ward Insère le dernier
mot de la saisie
insert-last-word
mardi 5 mai 2009
Quelques bindkeys utiles
history-search-{back|for}ward
insert-last-word Temporise la
commande en cours
push-line
mardi 5 mai 2009
Étendre les bindkeys
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi):
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi): bindkey -s '((' '()\\ei'
mardi 5 mai 2009
Étendre les bindkeys
Création d’un bindkey (vi): bindkey -s '((' '()\\ei'
Permet de rajouter automatiquement la
parenthèse fermante et de reculer d’un
caractère
mardi 5 mai 2009
D’autres fonctionnalités
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
alias
mardi 5 mai 2009
D’autres fonctionnalités
autopushd
zmv
alias
historique partagé
mardi 5 mai 2009
autopushd
autopushd est une option permettant la
mise en pile (stack) des n derniers
répertoires visités dans la session
permet de faire cd -<tab/numéro> pour
retourner rapidement un ancien répertoire
mardi 5 mai 2009
zmv
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer
plusieurs fichiers, la manière classique est
d’utiliser une boucle
for file in **/*(#i).ogg ; do
mv $file ${(C)$file:r}.ogg ;
done
Puis autre boucle pour gérer les répertoires
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer
plusieurs fichiers, la manière classique est
d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer
plusieurs fichiers, la manière classique est
d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer
plusieurs fichiers, la manière classique est
d’utiliser une boucle
mardi 5 mai 2009
zmv
Lorsque que vous devez renommer
plusieurs fichiers, la manière classique est
d’utiliser une boucle
Maintenant, pensez zmv !
% zmv '(*) - (*) - (*).ogg' '$1/$2/$1 - $2 - $3.ogg'
mardi 5 mai 2009
Les alias
mardi 5 mai 2009
Les alias
Alias de suffixe
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -
in”
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -
in”
alias -s log=”tail -f”
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -
in”
alias -s log=”tail -f”
Alias globaux
mardi 5 mai 2009
Les alias
Alias de suffixe
alias -s pem=”openssl x509 -noout -text -
in”
alias -s log=”tail -f”
Alias globaux
alias -g L=”| less”
mardi 5 mai 2009
Historique partagé
Toutes les sessions partagent le même
fichier d’historique
Très utile pour coupler avec la recherche
d’historique !
mardi 5 mai 2009
Merci de votre attention !
En savoir plus :
http://www.zsh.org/ http://www.zshwiki.org/
http://cli.asyd.net/
mailto:shell-requests@asyd.net?Subject=subscribe
irc://#zsh@irc.freenode.net/
irc://#zsh-fr@irc.freenode.net/
mardi 5 mai 2009
0 comments
Post a comment