zstyle
semble être juste un endroit central pour stocker et récupérer des données, comme une alternative aux export
paramètres du shell -ing. Est-ce vrai ou y a-t-il plus?
zstyle
semble être juste un endroit central pour stocker et récupérer des données, comme une alternative aux export
paramètres du shell -ing. Est-ce vrai ou y a-t-il plus?
Réponses:
zstyle
gère le contrôle de style évident pour le système d'achèvement, mais il semble couvrir plus que cela. Par exemple, le vcs_info
module s'appuie sur lui pour afficher l'état git dans votre invite. Vous pouvez commencer par regarder les quelques paragraphes explicatifs man zshmodules
de la zstyle
section.
Vous pouvez simplement l'invoquer pour voir quels paramètres sont en vigueur. Cela peut être instructif.
Le livre Zsh propose également un chapitre intéressant zstyle
, expliquant en détail ses différents domaines.
Vous pouvez chercher dans le .../Completion/
répertoire de votre système pour voir comment certains de ces fichiers utilisent zstyle
. Un emplacement commun est proche /usr/share/zsh/functions/Completion/*
. Je le vois utilisé dans plus de 100 fichiers sur mon système là-bas. Les utilisateurs ont souvent aussi zstyle
saupoudré autour d'eux ~/.zshrc
. Voici quelques jolies pour ajouter de la couleur et des descriptions à votre réalisation:
# Do menu-driven completion.
zstyle ':completion:*' menu select
# Color completion for some things.
# http://linuxshellaccount.blogspot.com/2008/12/color-completion-using-zsh-modules-on.html
zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS}
# formatting and messages
# http://www.masterzen.fr/2009/04/19/in-love-with-zsh-part-one/
zstyle ':completion:*' verbose yes
zstyle ':completion:*:descriptions' format "$fg[yellow]%B--- %d%b"
zstyle ':completion:*:messages' format '%d'
zstyle ':completion:*:warnings' format "$fg[red]No matches for:$reset_color %d"
zstyle ':completion:*:corrections' format '%B%d (errors: %e)%b'
zstyle ':completion:*' group-name ''
# Completers for my own scripts
zstyle ':completion:*:*:sstrans*:*' file-patterns '*.(lst|clst)'
zstyle ':completion:*:*:ssnorm*:*' file-patterns '*.tsv'
# ...
Le système d'achèvement rend la plupart des champs clairs si vous jouez avec. Essayez de taper zstyle :«tab»
et vous voyez quelques options. Complétez par tabulation jusqu'au deux-points suivant et vous verrez l'ensemble d'options suivant, etc.
Pour bien comprendre le zstyle
fonctionnement, vous devez d'abord comprendre que zsh est un programme modulaire. Deman zshmodules
Certaines parties optionnelles de zsh sont dans des modules, séparés du cœur du shell. Chacun de ces modules peut être lié au shell au moment de la construction, ou peut être lié dynamiquement pendant que le shell est en cours d'exécution si l'installation prend en charge cette fonctionnalité. [...]
À cet égard, zsh ressemble plus à un interpréteur comme PHP où les principales commandes intégrées sont définies dans le module "core", mais d'autres commandes intégrées sont contenues dans "modules".
D'accord, alors qu'est-ce que "zstyle"?
zsh, comme d'autres shells, a des commandes intégrées, telles que source
, cd
ou declare
- zstyle
est juste une autre de ces "commandes intégrées".
les options intégrées et shell sont généralement "globales" dans le sens où elles sont généralement (mais pas toujours) applicables / utilisables à tout moment ou dans tout contexte tout au long du processus shell, ou en d'autres termes, elles s'appliquent généralement à zsh et à tous les sous-systèmes (modules). Notez que cela s'applique si un shell est appelé en tant qu'interpréteur interactif ou non interactif.
Ainsi, par exemple, vous pouvez utiliser l'option intégrée source
ou cd
ou le shell "globstar" sera valide que ce soit à l'invite de commandes ou dans une case
instruction dans un script non interactif ou dans une fonction de ce même script.
Contrairement à une autre réponse ci-dessus, ce zstyle
n'est pas un module intégré spécifique au module "compsys" (système de complétion), zstyle
c'est un module intégré "global".
zstyle
est défini par le zsh/util
module, cela signifie simplement que le code qui définit comment analyser, et "faire" zstyle
est défini dans le zsh/zutil
module.
Vous pourriez tout aussi bien oublier ce fait, c'est-à-dire que bash ne vous oblige pas à savoir que le code de la commande eval
intégrée est contenu dans le fichier eval.c
, mais pour obtenir de l'aide zstyle
, il est utile de savoir qu'il zstyle
s'agit d'une commande intégrée définie dans le zsh/zutil
module, et la documentation du zsh/zutil
module est accessible en exécutant man zshmodules
.
Donc, traditionnellement, les options shell sont généralement «globales», mais selon la description de man zshmodules
, Certaines parties optionnelles de zsh sont dans des modules , et aussi, une grande partie de la zsh
fonctionnalité a été écrite dans des fonctions shell. (similaire à la façon dont beaucoup de fonctionnalités de base et facultatives de vim ont été écrites dans vimscript).
Alors, si vous voulez pouvoir spécifier des options qui s'appliquent uniquement à ces modules ou fonctions, comment feriez-vous?
Eh bien, c'est ce zstyle
qui vous donne la possibilité de "cibler" les options à un niveau beaucoup plus fin que les options de shell "globales" traditionnelles.
zstyle
y parvient grâce à l'argument"pattern"
Un exemple de commande qui configure certains comportements optionnels spécifiques à "compsys":
zstyle ':completion::complete:lsof:*' menu yes select
et configurer un comportement facultatif spécifique à "vcs_info":
zstyle ':vcs_info:*' actionformats \
'%F{5}(%f%s%F{5})%F{3}-%F{5}[%F{2}%b%F{3}|%F{1}%a%F{5}]%f '
Mais cela ne s'arrête pas là, la zstyles
capacité de cibler des contextes est incroyablement puissante, par exemple, disons que vous vouliez définir un comportement / des options pour la vcs_info
fonctionnalité, lorsque vous étiez un .git
référentiel, par opposition à un référentiel svn
, alors vous pourriez modifier le modèle de contexte
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
Qu'en est-il du comportement optionnel pour un projet spécifique, avec un svn
repo? ensuite
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
La seule description vaguement significative du style "(z)" stupidement nommé et mal documenté "que j'ai trouvé - vient du glossaire de From Bash To The Z Shell
style
Dans
zsh
, le mécanisme de style est un moyen flexible de configurer des modules complémentaires de shell qui utilisent des fonctions, telles que le système de complétion et les widgets de l'éditeur. Contrairement aux variables, elles peuvent être différentes dans différents contextes et contrairement aux options du shell, elles peuvent prendre des valeurs. Le mécanisme est basé sur le style de commande.
aussi, dans la section "Styles de manipulation", l'auteur développe plus loin ...
Avec des fonctions d'achèvement plus sophistiquées, vous souhaiterez peut-être autoriser la configuration de certains aspects du comportement de la fonction à l'aide de
style
.... de nombreuses fonctions d'assistance recherchent des styles pour vous, de sorte que votre fonction réagira à de nombreux styles sans que votre fonction doive faire quoi que ce soit en particulier. Pour avoir une idée des styles recherchés dans une situation particulière, appelez la fonction _complete_help avec un argument numérique. Normalement, vous pouvez le faire en appuyant sur Esc2puis sur Ctrl
-
x h. Ceci est principalement utile lors de la configuration de l'achèvement car il vous permet de voir quels styles sont recherchés et le contexte associé.
L'une des choses les plus frustrantes à propos de ZSH est de savoir où trouver ses différentes commandes dans les pages de manuel. Dans ce cas, la documentation de zstyle peut être trouvée dans man zshmodules
ou ici en ligne .
Cette commande intégrée est utilisée pour définir et rechercher des styles. Les styles sont des paires de noms et de valeurs, où les valeurs se composent d'un nombre quelconque de chaînes. Ils sont stockés avec des modèles et la recherche se fait en donnant une chaîne, appelée «contexte», qui est comparée aux modèles. La définition stockée pour le premier modèle correspondant sera retournée.
Il y a un énorme manque de bons exemples dans l'espace zsh, et la documentation est obtuse. J'ai passé un peu de temps à regarder comment Prezto utilise zstyle, ainsi qu'à lire les documents et à essayer certaines choses. zstyle semble être principalement utilisé dans les complétions, mais est en fait très bon pour stocker des données d'une manière plus sophistiquée que les variables de l'environnement classique.
Cet aperçu montre comment vous pouvez utiliser zstyle pour stocker et récupérer des informations:
# reference: http://zsh.sourceforge.net/Doc/Release/Zsh-Modules.html#The-zsh_002fzutil-Module
# list all zstyle settings
zstyle -L
# set a string value
zstyle :example:favorites fruit apple
# set an explicit string value
zstyle -s ':example:favorites' 'computer' 'apple'
# assign new $fav variable with -g
zstyle -g fav ':example:favorites' fruit && echo $fav
# be explicit about the assignment data type:
# -a: array, -b: boolean, -s: string
zstyle -b ':example:favorites:vegtable' 'broccoli' no
# test with -t
if zstyle -t ':example:favorites' 'fruit' 'apple'; then
echo "an apple a day keeps the dr. away"
fi
if ! zstyle -t ':example:favorites:vegtable' 'broccoli' 'no'; then
echo "Broccoli is the deadliest plant on Earth - why, it tries to warn you itself with its terrible taste"
fi
# delete a value with -d
zstyle -d ':example:favorites' 'computer'
# list only zstyle settings for a certain pattern
zstyle -L ':example:favorites*'