zstyleEs scheint nur ein zentraler Ort zum Speichern und Abrufen von Daten zu sein, eine Alternative zu exportShell-Parametern. Ist das wahr oder steckt noch mehr dahinter?
Hat das q aus zwei Gründen hochgestuft; a) Google schickt mich trotzdem hierher; b) zstyle scheint eine Menge zu haben, die nichts mit "Stil" oder Auto-Vervollständigung zu tun zu haben scheint. Eine der Antworten hier kommentiert sogar, wie das Feature schrecklich benannt ist.
ZaTricky
Antworten:
19
zstylebehandelt die offensichtliche Stilkontrolle für das Vervollständigungssystem, aber es scheint mehr als nur das zu umfassen. Das vcs_infoModul verwendet es beispielsweise zur Anzeige des Git-Status in Ihrer Eingabeaufforderung. Sie können durch einen Blick auf den wenigen erläuternden Absätzen beginnen man zshmodulesim zstyleAbschnitt.
Sie können es einfach aufrufen, um zu sehen, welche Einstellungen wirksam sind. Dies kann aufschlussreich sein.
Das Zsh-Buch enthält ein zstyleausführliches Kapitel , in dem auch die verschiedenen Bereiche ausführlich erläutert werden.
Sie können im .../Completion/Verzeichnis auf Ihrem System nachsehen, wie einige dieser Dateien verwendet werden zstyle. Ein gemeinsamer Ort ist in der Nähe /usr/share/zsh/functions/Completion/*. Ich sehe, dass es in mehr als 100 Dateien auf meinem System verwendet wird. Auch Benutzer haben sich oft in ihrer zstyleNähe ~/.zshrcherumgetrieben. Hier sind einige nette Beispiele, mit denen Sie Ihrem Abschluss Farbe und Beschreibungen hinzufügen können:
# 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'# ...
Das Vervollständigungssystem macht die meisten Felder deutlich, wenn Sie damit herumspielen. Versuchen Sie es mit der Eingabe, zstyle :«tab»und Sie sehen einige Optionen. Wenn Sie die Tabulatortaste bis zum nächsten Doppelpunkt ausfüllen, werden die nächsten Optionen usw. angezeigt.
Vielen Dank für den Link zum Zsh-Buch und den Tipp zum Completion-Verzeichnis. Das Zsh-Handbuch ist sehr funktional und enthält nur sehr
wenige
"... ist schwer in der Funktionalität und sehr leicht in Anwendungsfällen und Beispielen" - leider der Fall für die meisten von Programmierern geschriebenen Materialien.
aaaaaa
9
Um richtig zu verstehen, wie es zstylefunktioniert, müssen Sie zunächst verstehen, dass zsh ein modulares Programm ist. Vonman zshmodules
Einige optionale Teile von zsh befinden sich in Modulen, die vom Kern der Shell getrennt sind. Jedes dieser Module kann zur Erstellungszeit in die Shell eingebunden oder während der Ausführung der Shell dynamisch eingebunden werden, wenn die Installation diese Funktion unterstützt. [...]
In dieser Hinsicht ähnelt zsh eher einem Interpreter wie PHP, in dem die wichtigsten eingebauten Befehle im "Kern" -Modul definiert sind, während andere eingebaute Befehle in "Modulen" enthalten sind.
Ok, großartig, was ist dann "zstyle"?
zsh hat wie andere Shells eingebaute Befehle, wie zum Beispiel source, cdoder declare- zstyleist nur ein weiterer dieser "eingebauten" Befehle.
Umfang der eingebauten und Shell-Optionen
Builtins und Shell-Optionen sind in der Regel "global" in dem Sinne, dass sie während des gesamten Shell-Prozesses im Allgemeinen (aber nicht immer) anwendbar / verwendbar sind. Mit anderen Worten, sie gelten im Allgemeinen für zsh und alle Subsysteme (Module). Beachten Sie, dass dies unabhängig davon gilt, ob eine Shell als interaktiver oder nicht interaktiver Interpreter aufgerufen wird.
So zum Beispiel können Sie die builtin der Verwendung sourceoder cdoder die Shell - Option „globstar“ gültig sein wird , ob an einer Eingabeaufforderung oder in einer caseAnweisung in einer nicht-interaktiven Skript oder in einer Funktion im selber Skript.
Im Gegensatz zu einer anderen Antwort oben zstyleist kein Builtin, das für das "compsys" (completions system) -Modul spezifisch zstyleist, ein "globales" Builtin.
zstyleWird vom zsh/utilModul definiert , bedeutet dies einfach, dass der Code, der das Parsen definiert, und "do" zstyleim zsh/zutilModul definiert werden.
Sie könnten diese Tatsache genauso gut vergessen, dh Bash erfordert nicht, dass Sie wissen, dass der Code für das evaleingebaute Element in der Datei enthalten ist eval.c, aber um Hilfe zu erhalten zstyle, ist es hilfreich zu wissen, dass zstylees sich um ein im zsh/zutilModul definiertes integriertes Element handelt , und Auf die Dokumentation für das zsh/zutilModul kann durch Ausführen von zugegriffen werden man zshmodules.
Festlegen von Optionen, die für ein Modul oder eine Shell-Funktion spezifisch sind
Traditionell waren Shell-Optionen also im Allgemeinen "global", aber wie in der Beschreibung von beschrieben man zshmodules, sind einige optionale Teile von zsh in Modulen enthalten , und außerdem wurde ein Großteil der zshFunktionalität in Shell-Funktionen geschrieben. (Ähnlich wie viele Kern- und optionale Funktionen von vim in vimscript geschrieben wurden).
Wenn Sie also Optionen angeben möchten, die nur für diese Module oder Funktionen gelten, wie würden Sie dies tun?
Nun, das ist zstylees, was Ihnen die Möglichkeit gibt, Optionen auf einer viel feineren Ebene als herkömmliche "globale" Shell-Optionen zu "zielen". zstyleerreicht dies durch die Auseinandersetzung"pattern"
Ein Beispielbefehl, der ein optionales Verhalten für "compsys" konfiguriert:
zstyle ':completion::complete:lsof:*' menu yes select
und Konfigurieren eines optionalen Verhaltens für "vcs_info":
Aber es hört nicht damit auf, die zstylesFähigkeit, auf Kontexte abzuzielen, ist unglaublich leistungsfähig. Angenommen, Sie möchten ein Verhalten / Optionen für das vcs_infoFeature definieren, wenn Sie ein .gitRepository sind, im Gegensatz zu einem svnRepo, dann könnten Sie das ändern Kontextmuster
:vcs_info:<svn_or_whatever_SCM_system>:*<style>
Was ist mit optionalem Verhalten für ein bestimmtes Projekt mit einem svnRepo? dann
Die einzige vage aussagekräftige Beschreibung des dumm benannten und schlecht dokumentierten "(z) -Stils", den ich gefunden habe, stammt aus dem Glossar von From Bash To The Z Shell
style
Der zshStilmechanismus ist eine flexible Methode zum Konfigurieren von Shell-Add-Ons, die Funktionen wie das Vervollständigungssystem und Editor-Widgets verwenden. Im Gegensatz zu Variablen können sie in verschiedenen Kontexten unterschiedlich sein und im Gegensatz zu Shell-Optionen können sie Werte annehmen. Der Mechanismus basiert auf dem Befehlsstil.
Außerdem geht der Autor im Abschnitt "Umgang mit Stilen" näher auf ...
Bei komplexeren Vervollständigungsfunktionen möchten Sie möglicherweise zulassen, dass Aspekte des Funktionsverhaltens mithilfe von konfiguriert werden können style.
... viele Hilfsfunktionen suchen Stile für Sie, damit Ihre Funktion auf viele Stile reagiert, ohne dass Ihre Funktion etwas Besonderes tun muss. Rufen Sie die _complete_help-Funktion mit einem numerischen Argument auf, um sich einen Überblick über die in einer bestimmten Situation nachgeschlagenen Stile zu verschaffen. Normalerweise können Sie dies tun, indem Sie Esc2gefolgt von drücken Ctrl-xh. Dies ist vor allem beim Konfigurieren des Abschlusses hilfreich, da Sie sehen können, welche Stile nachgeschlagen werden und in welchem Kontext sie angezeigt werden.
Eines der frustrierendsten Dinge an ZSH ist, herauszufinden, wo die verschiedenen Befehle in den Manpages zu finden sind. In diesem Fall finden Sie die Dokumentation für zstyle in man zshmodulesoder hier online .
Dieser eingebaute Befehl wird zum Definieren und Nachschlagen von Stilen verwendet. Stile sind Paare von Namen und Werten, wobei die Werte aus einer beliebigen Anzahl von Zeichenfolgen bestehen. Sie werden zusammen mit Mustern gespeichert, und die Suche erfolgt durch Angabe einer Zeichenfolge, die als "Kontext" bezeichnet wird und mit den Mustern verglichen wird. Die für das erste übereinstimmende Muster gespeicherte Definition wird zurückgegeben.
Dies ist die beste Antwort, da sie auf die Dokumente verweist. Ich brauchte das, um von zstyle lesen zu lernen. Die anderen Antworten geben nur Adresseinstellungsstile an.
Cbarrick
1
Es gibt einen großen Mangel an guten Beispielen im zsh-Bereich und die Dokumentation ist stumpf. Ich verbrachte einige Zeit damit, mir anzusehen, wie Prezto zstyle benutzt, die Dokumente zu lesen und einige Dinge auszuprobieren . zstyle wird anscheinend hauptsächlich in Vervollständigungen verwendet, eignet sich jedoch sehr gut zum Speichern von Daten auf eine Weise, die komplexer ist als einfache alte Umgebungsvariablen.
Diese Übersicht zeigt, wie Sie mit zstyle Informationen speichern und abrufen können:
# 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 -tif zstyle -t ':example:favorites''fruit''apple';then
echo "an apple a day keeps the dr. away"fiif! 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*'
Antworten:
zstyle
behandelt die offensichtliche Stilkontrolle für das Vervollständigungssystem, aber es scheint mehr als nur das zu umfassen. Dasvcs_info
Modul verwendet es beispielsweise zur Anzeige des Git-Status in Ihrer Eingabeaufforderung. Sie können durch einen Blick auf den wenigen erläuternden Absätzen beginnenman zshmodules
imzstyle
Abschnitt.Sie können es einfach aufrufen, um zu sehen, welche Einstellungen wirksam sind. Dies kann aufschlussreich sein.
Das Zsh-Buch enthält ein
zstyle
ausführliches Kapitel , in dem auch die verschiedenen Bereiche ausführlich erläutert werden.Sie können im
.../Completion/
Verzeichnis auf Ihrem System nachsehen, wie einige dieser Dateien verwendet werdenzstyle
. Ein gemeinsamer Ort ist in der Nähe/usr/share/zsh/functions/Completion/*
. Ich sehe, dass es in mehr als 100 Dateien auf meinem System verwendet wird. Auch Benutzer haben sich oft in ihrerzstyle
Nähe~/.zshrc
herumgetrieben. Hier sind einige nette Beispiele, mit denen Sie Ihrem Abschluss Farbe und Beschreibungen hinzufügen können:Das Vervollständigungssystem macht die meisten Felder deutlich, wenn Sie damit herumspielen. Versuchen Sie es mit der Eingabe,
zstyle :«tab»
und Sie sehen einige Optionen. Wenn Sie die Tabulatortaste bis zum nächsten Doppelpunkt ausfüllen, werden die nächsten Optionen usw. angezeigt.quelle
Um richtig zu verstehen, wie es
zstyle
funktioniert, müssen Sie zunächst verstehen, dass zsh ein modulares Programm ist. Vonman zshmodules
In dieser Hinsicht ähnelt zsh eher einem Interpreter wie PHP, in dem die wichtigsten eingebauten Befehle im "Kern" -Modul definiert sind, während andere eingebaute Befehle in "Modulen" enthalten sind.
Ok, großartig, was ist dann "zstyle"?
zsh hat wie andere Shells eingebaute Befehle, wie zum Beispiel
source
,cd
oderdeclare
-zstyle
ist nur ein weiterer dieser "eingebauten" Befehle.Umfang der eingebauten und Shell-Optionen
Builtins und Shell-Optionen sind in der Regel "global" in dem Sinne, dass sie während des gesamten Shell-Prozesses im Allgemeinen (aber nicht immer) anwendbar / verwendbar sind. Mit anderen Worten, sie gelten im Allgemeinen für zsh und alle Subsysteme (Module). Beachten Sie, dass dies unabhängig davon gilt, ob eine Shell als interaktiver oder nicht interaktiver Interpreter aufgerufen wird.
So zum Beispiel können Sie die builtin der Verwendung
source
odercd
oder die Shell - Option „globstar“ gültig sein wird , ob an einer Eingabeaufforderung oder in einercase
Anweisung in einer nicht-interaktiven Skript oder in einer Funktion im selber Skript.Im Gegensatz zu einer anderen Antwort oben
zstyle
ist kein Builtin, das für das "compsys" (completions system) -Modul spezifischzstyle
ist, ein "globales" Builtin.zstyle
Wird vomzsh/util
Modul definiert , bedeutet dies einfach, dass der Code, der das Parsen definiert, und "do"zstyle
imzsh/zutil
Modul definiert werden.Sie könnten diese Tatsache genauso gut vergessen, dh Bash erfordert nicht, dass Sie wissen, dass der Code für das
eval
eingebaute Element in der Datei enthalten isteval.c
, aber um Hilfe zu erhaltenzstyle
, ist es hilfreich zu wissen, dasszstyle
es sich um ein imzsh/zutil
Modul definiertes integriertes Element handelt , und Auf die Dokumentation für daszsh/zutil
Modul kann durch Ausführen von zugegriffen werdenman zshmodules
.Festlegen von Optionen, die für ein Modul oder eine Shell-Funktion spezifisch sind
Traditionell waren Shell-Optionen also im Allgemeinen "global", aber wie in der Beschreibung von beschrieben
man zshmodules
, sind einige optionale Teile von zsh in Modulen enthalten , und außerdem wurde ein Großteil derzsh
Funktionalität in Shell-Funktionen geschrieben. (Ähnlich wie viele Kern- und optionale Funktionen von vim in vimscript geschrieben wurden).Wenn Sie also Optionen angeben möchten, die nur für diese Module oder Funktionen gelten, wie würden Sie dies tun?
Nun, das ist
zstyle
es, was Ihnen die Möglichkeit gibt, Optionen auf einer viel feineren Ebene als herkömmliche "globale" Shell-Optionen zu "zielen".zstyle
erreicht dies durch die Auseinandersetzung"pattern"
Ein Beispielbefehl, der ein optionales Verhalten für "compsys" konfiguriert:
und Konfigurieren eines optionalen Verhaltens für "vcs_info":
Aber es hört nicht damit auf, die
zstyles
Fähigkeit, auf Kontexte abzuzielen, ist unglaublich leistungsfähig. Angenommen, Sie möchten ein Verhalten / Optionen für dasvcs_info
Feature definieren, wenn Sie ein.git
Repository sind, im Gegensatz zu einemsvn
Repo, dann könnten Sie das ändern KontextmusterWas ist mit optionalem Verhalten für ein bestimmtes Projekt mit einem
svn
Repo? dannquelle
Die einzige vage aussagekräftige Beschreibung des dumm benannten und schlecht dokumentierten "(z) -Stils", den ich gefunden habe, stammt aus dem Glossar von From Bash To The Z Shell
Außerdem geht der Autor im Abschnitt "Umgang mit Stilen" näher auf ...
quelle
Eines der frustrierendsten Dinge an ZSH ist, herauszufinden, wo die verschiedenen Befehle in den Manpages zu finden sind. In diesem Fall finden Sie die Dokumentation für zstyle in
man zshmodules
oder hier online .quelle
Es gibt einen großen Mangel an guten Beispielen im zsh-Bereich und die Dokumentation ist stumpf. Ich verbrachte einige Zeit damit, mir anzusehen, wie Prezto zstyle benutzt, die Dokumente zu lesen und einige Dinge auszuprobieren . zstyle wird anscheinend hauptsächlich in Vervollständigungen verwendet, eignet sich jedoch sehr gut zum Speichern von Daten auf eine Weise, die komplexer ist als einfache alte Umgebungsvariablen.
Diese Übersicht zeigt, wie Sie mit zstyle Informationen speichern und abrufen können:
quelle