Zsh est un shell puissant qui fonctionne à la fois comme un shell interactif et comme un interpréteur de langage de script. Tout en étant compatible avec le POSIX sh (pas par défaut, seulement si l’on émet emulate sh
), il offre des avantages tels que la complétion de tabulation et le globbing améliorés.
La FAQ Zsh offre plus de raisons d’utiliser Zsh.
Installation
Avant de commencer, les utilisateurs peuvent vouloir voir quel shell est actuellement utilisé :
$ echo $SHELL
Installer le paquet zsh. Pour des définitions de complétion supplémentaires, installez également le paquet zsh-completions.
Configuration initiale
Vérifiez que Zsh a été installé correctement en exécutant ce qui suit dans un terminal:
$ zsh
Vous devriez maintenant voir zsh-newuser-install, qui vous guidera à travers une configuration de base. Si vous voulez sauter cette étape, appuyez sur q
. Si vous ne l’avez pas vu, vous pouvez l’invoquer manuellement avec :
$ autoload -Uz zsh-newuser-install$ zsh-newuser-install -f
Faire de Zsh votre shell par défaut
Changez votre shell en /usr/bin/zsh
. Voir Command-line shell#Changer votre shell par défaut.
~/.bashrc
à ~/.zshrc
(par exemple, l’invite et les alias) et de ~/.bash_profile
à ~/.zprofile
(par exemple, le code qui démarre le système X Window).Fichiers de démarrage/arrêt
- Voir Un guide de l’utilisateur du Z-Shell pour des explications sur les shells interactifs et de connexion, et ce qu’il faut mettre dans vos fichiers de démarrage.
- Vous pourriez envisager de mettre en œuvre un chemin standard pour vos fichiers de configuration Zsh.
- Si
$ZDOTDIR
n’est pas défini,$HOME
est utilisé à la place. - Si l’option
RCS
n’est pas définie dans l’un des fichiers, aucun fichier de configuration ne sera lu après ce fichier. - Si l’option
GLOBAL_RCS
n’est pas définie dans l’un des fichiers, aucun fichier de configuration globale (/etc/zsh/*
) ne sera lu après ce fichier.
Au démarrage, Zsh lira par défaut les commandes des fichiers suivants dans cet ordre, à condition qu’ils existent.
-
/etc/zsh/zshenv
Utilisé pour définir les variables d’environnement pour tous les utilisateurs ; il ne doit pas contenir de commandes qui produisent une sortie ou supposent que le shell est attaché à un TTY. Lorsque ce fichier existe, il sera toujours lu, cela ne peut pas être remplacé. -
$ZDOTDIR/.zshenv
Utilisé pour définir les variables d’environnement de l’utilisateur ; il ne doit pas contenir de commandes qui produisent une sortie ou supposent que le shell est attaché à un TTY. Lorsque ce fichier existe, il sera toujours lu. -
/etc/zsh/zprofile
Utilisé pour exécuter des commandes au démarrage pour tous les utilisateurs, sera lu lors du démarrage en tant que shell de connexion. Veuillez noter que sur Arch Linux, il contient par défaut une ligne dont les sources/etc/profile
. Voir l’avertissement ci-dessous avant de vouloir supprimer cela !-
/etc/profile
Ce fichier devrait être sourcé par tous les shells compatibles POSIX sh lors de la connexion : il configure$PATH
et d’autres variables d’environnement et paramètres spécifiques à l’application (/etc/profile.d/*.sh
) lors de la connexion.
-
-
$ZDOTDIR/.zprofile
Utilisé pour exécuter les commandes de l’utilisateur au démarrage, sera lu lors du démarrage en tant que shell de connexion. Généralement utilisé pour démarrer automatiquement des sessions graphiques et pour définir des variables d’environnement à l’échelle de la session. -
/etc/zsh/zshrc
Utilisé pour définir la configuration du shell interactif et exécuter des commandes pour tous les utilisateurs, sera lu lors du démarrage en tant que shell interactif. -
$ZDOTDIR/.zshrc
Utilisé pour définir la configuration du shell interactif de l’utilisateur et exécuter des commandes, sera lu lors du démarrage en tant que shell interactif. -
/etc/zsh/zlogin
Utilisé pour exécuter des commandes pour tous les utilisateurs à la fin de la progression initiale, sera lu lors du démarrage comme un shell de connexion. -
$ZDOTDIR/.zlogin
Utilisé pour exécuter les commandes de l’utilisateur à la fin de la progression initiale, sera lu lors du démarrage comme un shell de connexion. Généralement utilisé pour démarrer automatiquement les utilitaires de ligne de commande. Ne devrait pas être utilisé pour démarrer automatiquement des sessions graphiques, car à ce stade, la session pourrait contenir une configuration destinée uniquement à un shell interactif. -
$ZDOTDIR/.zlogout
Utilisé pour exécuter les commandes lorsqu’un shell de connexion se termine. -
/etc/zsh/zlogout
Utilisé pour exécuter les commandes pour tous les utilisateurs lorsqu’un shell de connexion se termine.
Voir la représentation graphique.
-
$HOME/.profile
ne fait pas partie des fichiers de démarrage de Zsh et n’est pas sourcé par Zsh à moins que Zsh soit invoqué en tant quesh
ouksh
et démarré en tant que shell de connexion. Pour plus de détails sur les modes de compatibilité sh et ksh, reportez-vous à zsh(1) § COMPATIBILITÉ. - Les chemins utilisés dans le paquetage zsh d’Arch sont différents de ceux utilisés par défaut dans les pages de manuel (FS#48992).
/etc/zsh/zprofile
, sinon cela brisera l’intégrité d’autres paquets qui fournissent certains scripts dans /etc/profile.d/
.Configurer Zsh
Bien que Zsh soit utilisable hors de la boîte, il n’est presque certainement pas configuré de la façon dont la plupart des utilisateurs aimeraient l’utiliser. Mais en raison de la quantité même de personnalisation disponible dans Zsh, la configuration de Zsh peut être une expérience intimidante et longue.
Simple .zshrc
Inclus ci-dessous est un exemple de fichier de configuration. Il fournit un ensemble décent d’options par défaut ainsi que de donner des exemples de nombreuses façons que Zsh peut être personnalisé. Afin d’utiliser cette configuration, enregistrez-la dans un fichier nommé .zshrc
.
source ~/.zshrc
.Voici une simple .zshrc
:
~/.zshrc
autoload -Uz compinit promptinitcompinitpromptinit# Ceci définira l'invite par défaut au thème waltersprompt walters
Voir #Thèmes d’invite pour plus de détails sur le système de thèmes d’invite.
Configuration de $PATH
Zsh lie la variable PATH
à un tableau path
. Ils sont automatiquement synchronisés. Cela nous permet de manipuler facilement PATH
en modifiant simplement le tableau. Voir le Guide de l’utilisateur du Z-Shell pour plus de détails.
La ligne typeset -U PATH path
, où le -U
signifie unique, demande au shell d’éliminer les doublons à la fois de $PATH
et de $path
:
~/.zshenv
typeset -U PATH pathpath=("$HOME/.local/bin" /other/things/in/path "$path")export PATH
Command completion
Peut-être que la fonctionnalité la plus convaincante de Zsh est ses capacités avancées d’autocomplétion. Au minimum, activez l’autocomplétion dans .zshrc
. Pour activer l’autocomplétion, ajoutez ce qui suit à votre ~/.zshrc
:
~/.zshrc
autoload -Uz compinitcompinit
La configuration ci-dessus inclut la complétion des noms d’hôtes ssh/scp/sftp, mais pour que cette fonctionnalité fonctionne, les utilisateurs ne doivent pas activer le hachage des noms d’hôtes de ssh (i.c’est-à-dire l’option HashKnownHosts
dans la configuration du client ssh).
Pour l’autocomplétion avec une interface pilotée par des touches fléchées, ajoutez ce qui suit à:
~/.zshrc
zstyle ':completion:*' menu select
Pour activer le menu, appuyez deux fois sur Tab
.
Pour l’autocomplétion des commutateurs de ligne de commande pour les alias, ajoutez ce qui suit à:
~/.zshrc
setopt COMPLETE_ALIASES
Pour activer l’autocomplétion des environnements privilégiés dans les commandes privilégiées (par ex.par exemple, si vous complétez une commande commençant par sudo, les scripts de complétion essaieront également de déterminer vos complétions avec sudo), incluez:
~/.zshrc
zstyle ':completion::complete:*' gain-privileges 1
Liés aux clés
Zsh n’utilise pas readline, à la place il utilise son propre et plus puissant éditeur de ligne Zsh (ZLE). Il ne lit pas /etc/inputrc
ou ~/.inputrc
. Lisez Un regard plus attentif sur l’éditeur de ligne zsh et la création de widgets personnalisés pour une introduction à la configuration de ZLE.
ZLE a un mode Emacs et un mode vi. Si l’une des variables d’environnement VISUAL
ou EDITOR
contient la chaîne vi
, alors le mode vi sera utilisé ; sinon, il sera par défaut en mode Emacs. Définissez le mode explicitement avec bindkey -e
ou bindkey -v
respectivement pour le mode Emacs ou le mode vi.
Les liaisons de touches sont assignées en mappant une séquence d’échappement correspondant à une pression de touche à un widget ZLE. Les widgets disponibles, avec des descriptions de leurs actions et de leurs liaisons de touches par défaut, sont listés dans zshzle(1) § STANDARD WIDGETS et zshcontrib(1) § ZLE FUNCTIONS.
La façon recommandée de définir les liaisons de touches dans Zsh est d’utiliser les capacités de chaînes de terminfo(5). Par exemple :
~/.zshrc
# créer un hachage compatible zkbd;# pour ajouter d'autres clés à ce hachage, voir : man 5 terminfotypeset -g -A keykey="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"key="${terminfo}"# paramétrer la clé en conséquence}" ]] && bindkey -- "${key}" début de la ligne}" ]] && bindkey -- "${key}" end-of-line}" ]] && bindkey -- "${key}" overwrite-mode}" ]] && bindkey -- "${key}" backward-delete-char}" ]] && bindkey -- "${key}" delete-char}" ]] && bindkey -- "${key}" up-line-or-history}" ]] && bindkey -- "${key}" down-line-or-history}" ]] && bindkey -- "${key}" backward-char}" ]] && bindkey -- "${key}" forward-char}" ]] && bindkey -- "${key}" beginning-of-buffer-or-history}" ]] && bindkey -- "${key}" end-of-buffer-or-history}" ]] && bindkey -- "${key}" reverse-menu-complete# Enfin, assurez-vous que le terminal est en mode application, lorsque zle est# actif. Ce n'est qu'à ce moment-là que les valeurs de $terminfo sont valides.if (( ${+terminfo} && ${+terminfo} )) ; thenautoload -Uz add-zle-hook-widgetfunction zle_application_mode_start { echoti smkx }function zle_application_mode_stop { echoti rmkx }add-zle-hook-widget -Uz zle-line-init zle_application_mode_startadd-zle-hook-widget -Uz zle-line-finish zle_application_mode_stopfi
Recherche d’historique
Vous devez configurer le tableau key
et vous assurer que ZLE entre en mode application pour utiliser les instructions suivantes ; voir #Les liaisons de touches.
Pour activer la recherche d’historique, ajoutez ces lignes au .zshrc
fichier:
~/.zshrc
autoload -Uz up-line-or-beginning-search down-line-or-beginning-searchzle -N up-line-or-beginning-searchzle -N down-line-or-beginning-search}" ]] && bindkey -- "${key}" up-line-or-beginning-search}" ]] && bindkey -- "${key}" down-line-or-beginning-search
En faisant cela, seules les commandes passées correspondant à la ligne actuelle jusqu’à la position actuelle du curseur seront affichées lorsque les touches Up
ou Down
sont pressées.
Modificateurs Shift, Alt, Ctrl et Meta
Les terminaux compatibles xterm peuvent utiliser les définitions de touches étendues de user_caps(5). Ce sont des combinaisons de Shift
, Alt
, Ctrl
et Meta
avec Up
, Down
, Left
, Right
, PageUp
, PageDown
, Home
, End
ou Del
. Reportez-vous à la source zkbd pour obtenir une liste des noms recommandés pour les touches de modification et les combinaisons de touches.
Par exemple, pour que Ctrl+Left
se déplace au début du mot précédent et Ctrl+Right
au début du mot suivant:
~/.zshrc
key="${terminfo}"key="${terminfo}"}"" ]] && bindkey -- "${key}" backward-word}" ]] && bindkey -- "${key}" forward-word
Prompts
Zsh offre les options d’utiliser un thème de prompt ou, pour les utilisateurs qui ne sont pas satisfaits des thèmes (ou qui veulent étendre leur utilité), la possibilité de construire un prompt personnalisé.
Thèmes de prompt
Les thèmes de prompt sont un moyen rapide et facile de configurer un prompt coloré dans Zsh. Voir zshcontrib(1) § PROMPT THEMES pour des informations sur les thèmes d’invite et comment écrire votre propre thème.
Pour utiliser un thème, assurez-vous que le système de thème d’invite est configuré pour autoload dans .zshrc
. Cela peut être fait en ajoutant ces lignes à:
~/.zshrc
autoload -Uz promptinitpromptinit
Les thèmes d’invite disponibles sont listés en exécutant la commande :
$ prompt -l
Par exemple, pour utiliser le thème walters
, entrez :
$ prompt walters
Pour avoir un aperçu de tous les thèmes disponibles, utilisez cette commande:
$ prompt -p
Installation manuelle de thèmes d’invite
Il est possible d’installer des thèmes manuellement, sans outils externes de gestionnaire de configuration. Pour une installation locale, créez d’abord un dossier et ajoutez-le au tableau fpath
, par exemple:
$ mkdir ~/.zprompts$ fpath=("$HOME/.zprompts" "$fpath")
Créez ensuite un lien symbolique de votre fichier de thème dans ce dossier :
$ ln -s mytheme.zsh ~/.zprompts/prompt_mytheme_setup
Si au lieu de cela vous souhaitez installer un thème globalement, faites:
# ln -s mytheme.zsh /usr/share/zsh/functions/Prompts/prompt_mytheme_setup
Maintenant vous devriez pouvoir l’activer en utilisant:
$ prompt mytheme
Si tout fonctionne, vous pouvez modifier votre .zshrc
en conséquence.
Ajouter des thèmes d’invite sans un fichier séparé pour chacun
En plus d’ajouter un thème d’invite via son propre fichier, il est possible d’ajouter des thèmes à partir d’un autre fichier (comme votre .zshrc
), par exemple:
~/.zshrc
# Charger promptinitautoload -Uz promptinit && promptinit# Définir le thèmeprompt_mytheme_setup() { PS1="%~%#"}# Ajouter le thème aux promptsysprompt_themes+=( mytheme )# Charger le themeprompt mytheme
Prompt personnalisé
Cet article ou cette section nécessite une expansion.
PROMPT
. (Discuter dans Talk:Zsh#)En plus d’un prompt primaire de gauche PS1
(PROMPT
, prompt
) qui est commun à tous les shells, Zsh supporte également un prompt de droite RPS1
(RPROMPT
). Ces deux variables sont celles que vous voudrez définir à une valeur personnalisée.
Les autres invites à usage spécial, comme PS2
(PROMPT2
), PS3
(PROMPT3
), PS4
(PROMPT4
), RPS1
(RPROMPT
), RPS2
(RPROMPT2
) et SPROMPT
, sont expliquées dans zshparam(1) § PARAMÈTRES UTILISÉS PAR LE SHELL.
Toutes les invites peuvent être personnalisées avec des échappatoires d’invite. Les échappements d’invite disponibles sont listés dans zshmisc(1) § EXPANSION DES SEQUENCES D’INVITATION.
Couleurs
Zsh définit les couleurs différemment de Bash, vous n’avez pas besoin d’utiliser des séquences d’échappement ANSI alambiquées ou des capacités de terminal provenant de terminfo(5). Zsh fournit des échappements d’invite pratiques pour définir la couleur de premier plan, la couleur d’arrière-plan et d’autres effets visuels ; voir zshmisc(1) § Effets visuels pour une liste de ceux-ci et leurs descriptions.
Les couleurs peuvent être spécifiées en utilisant un entier décimal, le nom d’une des huit couleurs les plus largement supportées ou comme un # suivi d’un triplet RVB au format hexadécimal. Voir la description de fg=colour dans zshzle(1) § CHARACTER HIGHLIGHTING pour plus de détails.
La plupart des terminaux supportent les couleurs suivantes par leur nom :
Nom | Numéro |
---|---|
black |
0 |
red |
1 |
green |
2 |
yellow |
3 |
blue |
4 |
magenta |
5 |
cyan |
6 |
white |
7 |
Les numéros de couleur 0-255 pour les émulateurs de terminaux compatibles avec xterm 256 couleurs peuvent être trouvés dans le xterm-.256color chart.
Avec une variable d’environnement TERM correctement définie, le nombre maximum de couleurs supportées par le terminal peut être trouvé à partir de la base de données terminfo(5) en utilisant echoti colors
. Dans le cas de couleurs 24 bits, vérifiez également la variable d’environnement COLORTERM avec print $COLORTERM
. Si elle renvoie 24bit
ou truecolor
, alors votre terminal prend en charge 16777216 (224) couleurs, même si terminfo indique un nombre inférieur.
- Les couleurs 0-15 peuvent différer entre les émulateurs de terminaux et leurs schémas de couleurs utilisés.
- De nombreux émulateurs de terminaux affichent le gras avec une couleur plus vive.
- Les échappatoires d’invite peuvent être testées avec la commande
print -P "prompt escapes"
, par exemple :$ print -P '%B%F{red}co%F{green}lo%F{blue}rs%f%b'
- Si vous utilisez des couleurs 24 bits, vous pourriez vouloir charger le module
zsh/nearcolor
dans les terminaux qui ne les supportent pas. Par exemple :}" -eq '16777216' ]] || zmodload zsh/nearcolor
Voir zshmodules(1) § LE MODULE ZSH/NEARCOLOR pour des détails sur le module
zsh/nearcolor
.
Exemple
Voici un exemple d’invite à deux côtés:
PROMPT='%F{green}%n%f@%F{magenta}%m%f %F{blue}%B%~%b%f %# 'RPROMPT=''
Et voici comment elle sera affichée :
Pour utiliser les couleurs de la gamme 16-255 et la couleur vraie 24 bits, vous pouvez utiliser le nombre de 0 à 255 attribué à la couleur voulue et son code couleur hexadécimal, respectivement:
PROMPT='%F{2}%n%f@%F{5}%m%f %F{4}%B%~%b%f %# 'RPROMPT=''
PROMPT='%F{#c0c0c0}%n%f@%F{#008000}%m%f %F{#800080}%B%~%b%f %# 'RPROMPT=''
Exemple .zshrc files
- Pour obtenir la même configuration que les versions ISO mensuelles (qui utilisent Zsh par défaut), installez grml-zsh-config. Il inclut les nombreux ajustements et optimisations avancées de grml.
- https://github.com/MrElendig/dotfiles-alice/blob/master/.zshrc – configuration de base, avec invite dynamique et titre de fenêtre/hardinfo.
- https://github.com/slashbeast/conf-mgmt/blob/master/roles/home_files/files/DOTzshrc – zshrc avec de multiples fonctionnalités, assurez-vous de vérifier les commentaires à son sujet. Caractéristiques notables : fonction de confirmation pour s’assurer que l’utilisateur veut exécuter poweroff, reboot ou hibernation, support de GIT dans le prompt (fait sans vcsinfo), complétion de tabulation avec menu, impression de la commande exécutée actuelle dans la barre de titre de la fenêtre et plus.
Voir dotfiles#Dépôts utilisateurs pour plus.
Tips et astuces
Démarrage automatique de X à la connexion
Voir xinit#Démarrage automatique de X à la connexion.
Restaurer les paramètres du terminal après qu’un programme quitte anormalement
De nombreux programmes modifient l’état du terminal, et souvent ne restaurent pas les paramètres du terminal lors d’une sortie anormale (par exemple en cas de plantage ou de rencontre avec SIGINT).
Ce problème peut généralement être résolu en exécutant reset(1):
$ reset
Les sections suivantes décrivent des moyens d’éviter le besoin de réinitialiser manuellement le terminal.
La commande ttyctl
La commande ttyctl peut être utilisée pour « geler/dégeler » le terminal. Pour geler le shell interactif au lancement, utilisez ce qui suit:
~/.zshrc
ttyctl -f
Réinitialiser le terminal avec des séquences d’échappement
Les jeux de caractères alternatifs de dessin linéaire peuvent bousiller le terminal d’une manière que ttyctl ne peut pas empêcher.
Une solution simple consiste à sortir les séquences d’échappement qui réinitialisent le terminal à partir de la fonction hook precmd
, de sorte qu’elles soient exécutées chaque fois avant que l’invite ne soit dessinée. Par exemple, utiliser la séquence d’échappement \e] && (( ${#dirstack} == 0 )); thendirstack=("${(@f)"$(< "$DIRSTACKFILE")"}")}" ]] && cd -- "${dirstack}"fichpwd_dirstack() {print -l -- "$PWD" "${(u)dirstack}" > "$DIRSTACKFILE"}add-zsh-hook -Uz chpwd chpwd_dirstackDIRSTACKSIZE='20'setopt AUTO_PUSHD PUSHD_SILENT PUSHD_TO_HOME## Remove duplicate entriessetopt PUSHD_IGNORE_DUPS## This reverts the +/- operators.setopt PUSHD_MINUS
Now use
$ dirs -v
to print the dirstack. Use cd -<NUM>
pour revenir à un dossier visité. Utilisez l'autocomplétion après le tiret. Cela s'avère très pratique si vous utilisez le menu d'autocomplétion.
cd
, en raison d'un conflit dans les deux sessions écrivant sur le même fichier.cdr
cdr vous permet de changer le répertoire de travail vers un répertoire de travail précédent à partir d'une liste maintenue automatiquement. Il stocke toutes les entrées dans des fichiers qui sont maintenus à travers les sessions et (par défaut) entre les émulateurs de terminal dans la session actuelle.
Voir zshcontrib(1) § RAPPEL DES RÉPERTOIRES RÉCENTS pour les instructions de configuration.
Commande d'aide
À la différence de Bash, Zsh n'active pas une commande help
intégrée, à la place il fournit run-help
. Par défaut, run-help
est un alias de man
, il peut être soit exécuté manuellement en le faisant précéder d'une commande, soit être invoqué pour la commande actuellement tapée avec les raccourcis clavier Alt+h
ou Esc
h
.
Puisque par défaut c'est juste un alias de man, il ne fonctionnera que sur les commandes externes. Pour améliorer sa fonctionnalité, afin qu'il fonctionne sur les builtins et autres fonctionnalités de l'interpréteur de commandes, vous devez utiliser la fonction run-help
. Voir zshcontrib(1) pour plus d'informations sur la fonction run-help
et ses fonctions assistantes.
Chargez d'abord la fonction run-help
, puis supprimez l'alias run-help
existant. Par commodité, help
peut être aliasé à run-help
. Par exemple, ajoutez ce qui suit à votre zshrc
:
autoload -Uz run-help(( ${+aliases} )) && unalias run-helpalias help=run-help
Les fonctions auxiliaires doivent être activées séparément:
autoload -Uz run-help-git run-help-ip run-help-openssl run-help-p4 run-help-sudo run-help-svk run-help-svn
Par exemple, la commande run-help git commit
ouvrira désormais la page de manuel git-commit(1) au lieu de git(1).
Réhash persistant
Typiquement, compinit ne trouvera pas automatiquement les nouveaux exécutables dans le $PATH
. Par exemple, après avoir installé un nouveau paquet, les fichiers dans /usr/bin/
ne seraient pas immédiatement ou automatiquement inclus dans l'achèvement. Ainsi, pour que ces nouveaux exécutables soient inclus, il faudrait exécuter:
$ rehash
Ce 'rehash' peut être configuré pour se produire automatiquement. Il suffit d'inclure ce qui suit dans votre zshrc
:
~/.zshrc
zstyle ':completion:*' rehash true
Rehash à la demande
Comme ci-dessus, cependant pacman peut être configuré avec des hooks pour demander automatiquement un rehash
, ce qui n'entraîne pas la pénalité de performance du rehash constant comme ci-dessus. Pour activer ceci, créez le répertoire /etc/pacman.d/hooks
, et un répertoire /var/cache/zsh
, puis créez un fichier hook:
/etc/pacman.d/hooks/zsh.hook
Opération = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshWhen = PostTransactionExec = /usr/bin/install -Dm644 /dev/null /var/cache/zsh/pacman
Cela permet de garder la date de modification du fichier /var/cache/zsh/pacman
cohérente avec la dernière fois qu'un paquet a été installé, mis à niveau ou supprimé. Ensuite, zsh
doit être amadouée pour qu'elle remette en mémoire son propre cache de commandes lorsqu'il devient obsolète, en ajoutant à votre ~/.zshrc
:
~/.zshrc
zshcache_time="$(date +%s%N) "autoload -Uz add-zsh-hookrehash_precmd() { if ] ; then local paccache_time="$(date -r /var/cache/zsh/pacman +%s%N)" if (( zshcache_time < paccache_time )) ; then rehash zshcache_time="$paccache_time" fi fi}add-zsh-hook -Uz precmd rehash_precmd
Si le hook precmd
est déclenché avant que /var/cache/zsh/pacman
ne soit mis à jour, l'achèvement peut ne pas fonctionner jusqu'à ce qu'une nouvelle invite soit lancée. L'exécution d'une commande vide, par exemple en appuyant sur enter
, devrait être suffisante.
Alternative on-demand rehash using SIGUSR1
Comme ci-dessus, cependant le fichier hook ressemble à ceci:
/etc/pacman.d/hooks/zsh-rehash.hook
Opération = InstallOperation = UpgradeOperation = RemoveType = PathTarget = usr/bin/*Depends = zshDepends = procps-ngWhen = PostTransactionExec = /usr/bin/pkill zsh --signal=USR1
zsh
en cours d'exécution. Notez que le comportement par défaut pour SIGUSR1 est terminate, donc lorsque vous configurez ceci pour la première fois, toutes les instances zsh
en cours d'exécution de tous les utilisateurs (y compris les shells de connexion) se termineront si elles n'ont pas sourcé le piège ci-dessous.~/.zshrc
TRAPUSR1() { rehash }
La fonction piège ci-dessus peut être remplacée par une liste piège trap 'rehash' USR1
. Voir zshmisc(1) § Trap Functions pour les différences entre les types de pièges.
Cette méthode va instantanément rehash
toutes les instances de zsh
, supprimant le besoin d'appuyer sur entrée pour déclencher precmd
.
Lier une touche à une application ncurses
Lier une application ncurses à une touche, mais elle n'acceptera pas d'interaction. Utilisez la variable BUFFER
pour la faire fonctionner. L'exemple suivant permet aux utilisateurs d'ouvrir ncmpcpp en utilisant Alt+\
:
~/.zshrc
ncmpcppShow() { BUFFER="ncmpcpp" zle accept-line}zle -N ncmpcppShowbindkey '^2;
\a
. Par exemple:
$ print -n '\e]2;My xterm title\a'
définira le titre à
My xterm title
Une façon simple d’avoir un titre dynamique est de définir le titre dans les fonctions hook precmd
et preexec
. Voir zshmisc(1) § Fonctions de crochet pour une liste des fonctions de crochet disponibles et leurs descriptions.
En utilisant print -P
, vous pouvez en plus profiter des échappatoires d’invite de Zsh.
- L’impression du titre peut être divisée en plusieurs commandes tant qu’elles sont séquentielles.
- GNU Screen envoie le titre xterm au hardstatus (
%h
). Si vous voulez utiliser les échappatoires de chaîne de Screen (par exemple, pour les couleurs), vous devez définir le hardstatus avec la séquence d’échappement\e_
\e\
. Sinon, si les échappements de chaîne sont utilisés dans\e]2;
\a
, l’émulateur de terminal obtiendra un titre brouillé en raison de son incapacité à interpréter les échappements de chaîne de Screen.
- Ne pas utiliser l’option
-P
deprint
lors de l’impression de variables pour éviter qu’elles soient analysées comme des échappements d’invite. - Utilisez l’indicateur d’expansion de paramètre
q
lors de l’impression des variables pour les empêcher d’être analysées comme des séquences d’échappement.
~/.zshrc
autoload -Uz add-zsh-hookfunction xterm_title_precmd () {print -Pn -- '\e]2;%n@%m %~\a'] && print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-}\e\\'}fonction xterm_title_preexec () {print -Pn -- '\e]2;%n@%m %~ %# ' && print -n -- "${(q)1}\a"] && {print -Pn -- '\e_\005{g}%n\005{-}@\005{m}%m\005{-} \005{B}%~\005{-} %# ' && print -n -- "${(q)1}\e\\\" ; }}if ] ; thenadd-zsh-hook -Uz precmd xterm_title_precmdadd-zsh-hook -Uz preexec xterm_title_preexecfi
Titre de l’onglet de l’émulateur de terminal
Certains émulateurs de terminal et multiplexeurs prennent en charge la définition du titre de l’onglet. Les séquences d’échappement dépendent du terminal:
Terminal | Séquences d’échappement | Description |
---|---|---|
Écran GNU | \ek \e\ |
Titre de fenêtre de l’écran (%t ). |
Konsole | \e]30; \a |
Titre de l’onglet de la console. |
Détection de l’environnement du shell
Voir un référentiel sur la détection de l’environnement du shell pour les tests de détection de l’environnement du shell. Cela inclut le shell de connexion/interactif, la session Xorg, le TTY et la session SSH.
Equivalent de /dev/tcp : ztcp
Utiliser le module zsh/net/tcp
:
$ zmodload zsh/net/tcp
Vous pouvez maintenant établir des connexions TCP:
$ ztcp example.com 80
Court-circuit pour sortir du shell sur une ligne de commande partielle
Par défaut, Ctrl+d
ne fermera pas votre shell si la ligne de commande est remplie, ceci le corrige:
.zshrc
exit_zsh() { exit }zle -N exit_zshbindkey '^D' exit_zsh
Extensions tierces
Cadres de configuration
- oh-my-zsh – Un framework populaire et communautaire pour gérer votre configuration Zsh. Il est livré avec une tonne de fonctions utiles, des aides, des plugins, des thèmes.
https://github.com/ohmyzsh/ohmyzsh || oh-my-zsh-gitAUR
- Prezto – Un framework de configuration pour Zsh. Il est livré avec des modules, enrichissant l’environnement de l’interface de ligne de commande avec des valeurs par défaut saines, des alias, des fonctions, la complétion automatique et des thèmes d’invite.
https://github.com/sorin-ionescu/prezto || prezto-gitAUR
- ZIM – Un framework de configuration avec une vitesse flamboyante et des extensions modulaires. Zim est très facile à personnaliser, et est livré avec un riche ensemble de modules et de fonctionnalités sans compromettre la vitesse ou la fonctionnalité.
https://github.com/zimfw/zimfw || zsh-zim-gitAUR
Gestionnaires de plugins
- Antibody – Un gestionnaire de plugins axé sur la performance, similaire à Antigen.
https://github.com/getantibody/antibody || antibodyAUR
- zinit (précédemment « zplugin ») – Gestionnaire de plugins Zsh flexible avec fpath propre, rapports, gestion de l’achèvement, mode turbo
https://github.com/zdharma/zinit || zsh-zplugin-gitAUR
- Antigen – Un gestionnaire de plugins pour Zsh, inspiré par oh-my-zsh et vundle. ABANDONED
https://github.com/zsh-users/antigen || antigen-gitAUR
- zgen – Un gestionnaire de plugins léger et simple pour Zsh. ABANDONED
https://github.com/tarjoilija/zgen || zgen-gitAUR
- zplug – Un gestionnaire de plugins de nouvelle génération pour Zsh. ABANDONED
https://github.com/zplug/zplug || zplugAUR
La coloration syntaxique et les autosuggestions de type fish
Fish fournit une coloration syntaxique et des autosuggestions de shell très puissantes. Pour utiliser les deux dans Zsh, vous pouvez installer zsh-syntax-highlighting, zsh-autosuggestions, et enfin sourcer l’un ou les deux scripts fournis à partir de votre zshrc:
source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zshsource /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh
Le gestionnaire « commande non trouvée »
Cet article ou cette section est un candidat pour être déplacé vers #Tips and tricks.
pacman -F
n’est pas une « extension tierce ». Seuls les trucs de pkgfile ont leur place dans cette section. (Discutez dans Talk:Zsh#)handler pacman -F « command not found »
pacman inclut une fonctionnalité pour rechercher les paquets contenant un fichier. Le gestionnaire de commande non trouvée suivant utilisera directement pacman pour rechercher les paquets correspondants lorsqu’une commande inconnue est exécutée.
~/.zshrc
command_not_found_handler() {local pkgs cmd="$1" files=()printf 'zsh : command not found : %s' "$cmd" # imprime la commande non trouvée dès que possible, puis recherche les paquetsfiles=(${(f) "$(pacman -F --machinereadable -- "/usr/bin/${cmd}")"})if (( ${#files} )) ; thenprintf '\r%s peut être trouvé dans les paquets suivants :\n' "$cmd "local res=() repo package version filefor file in "$files" ; dores=("${(0)file}")repo="$res "package="$res "version="$res "file="$res "printf ' %s/%s %s : /%s\n' "$repo" "$package" "$version" "$file "doneelseprintf '\n'fireturn 127}
pacman -Fy
. Voir pacman#Search for a package that contains a specific file pour plus de détails.pkgfile « command not found » handler
pkgfile inclut un fichier script Zsh qui fournit une command_not_found_handler
fonction qui recherchera automatiquement la base de données pkgfile lors de la saisie d’une commande non reconnue.
Vous devez sourcer le script pour l’activer. Par exemple :
~/.zshrc
source /usr/share/doc/pkgfile/command-not-found.zsh
Désinstallation
Changer le shell par défaut avant de supprimer le paquetage zsh.
Exécutez la commande suivante :
$ chsh -s /bin/bash user
Utilisez-la pour chaque utilisateur avec zsh défini comme shell de connexion (y compris root si nécessaire). Une fois terminé, le paquet zsh peut être supprimé.
Alternativement, changez l’interpréteur de commandes par défaut pour revenir à Bash en éditant /etc/passwd
en tant que root.
/etc/passwd
car il aide à prévenir les entrées invalides et/ou les erreurs de syntaxe.Par exemple, changez ce qui suit:
username:x:1000:1000:Full Name,,,:/home/username:/usr/bin/zsh
En ceci:
username:x:1000:1000:Full Name,,,:/home/username:/bin/bash
Voir également
.