zstyle
wygląda na to, że jest to po prostu centralne miejsce do przechowywania i pobierania danych, jak alternatywa dla export
-ing parametrów powłoki. Czy to prawda, czy może jest coś więcej?
zstyle
wygląda na to, że jest to po prostu centralne miejsce do przechowywania i pobierania danych, jak alternatywa dla export
-ing parametrów powłoki. Czy to prawda, czy może jest coś więcej?
Odpowiedzi:
zstyle
obsługuje oczywistą kontrolę stylu dla systemu uzupełniania, ale wydaje się, że obejmuje więcej niż tylko to. Na przykład vcs_info
moduł polega na tym w celu wyświetlenia statusu git w pytaniu. Możesz zacząć od spojrzenia na kilka wyjaśniających akapitów man zshmodules
w tej zstyle
sekcji.
Możesz go po prostu wywołać, aby zobaczyć, jakie obowiązują ustawienia. To może być pouczające.
Zsh Książka ma ładny rozdziale dotyczącym leczenia zstyle
, również, wyjaśniając szczegółowo jego różnych dziedzinach.
Możesz przeszukać .../Completion/
katalog w swoim systemie, aby zobaczyć, w jaki sposób niektóre z tych plików korzystają zstyle
. Wspólna lokalizacja jest blisko /usr/share/zsh/functions/Completion/*
. Widzę, że jest tam używany w ponad 100 plikach w moim systemie. Użytkownicy często też zstyle
opryskują ich ~/.zshrc
. Oto kilka fajnych do dodania kolorów i opisów do twojego uzupełnienia:
# 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'
# ...
System uzupełniania pozwala wyczyścić większość pól, jeśli się nim bawisz. Spróbuj pisać, zstyle :«tab»
a zobaczysz kilka opcji. Uzupełnij tabulator do następnego dwukropka, a zobaczysz następny zestaw opcji itp.
Aby właściwie zrozumieć, jak zstyle
działa, musisz najpierw zrozumieć, że zsh jest programem modułowym. Zman zshmodules
Niektóre opcjonalne części zsh znajdują się w modułach, niezależnych od rdzenia powłoki. Każdy z tych modułów może być połączony z powłoką w czasie kompilacji lub może być połączony dynamicznie podczas działania powłoki, jeśli instalacja obsługuje tę funkcję. [...]
Pod tym względem zsh jest bardziej jak interpreter taki jak PHP, gdzie główne wbudowane polecenia są zdefiniowane w module „core”, ale inne wbudowane polecenia są zawarte w „modułach”.
Ok świetnie, więc czym jest „zstyle”?
zsh, podobnie jak inne powłoki, ma wbudowane polecenia, takie jak source
, cd
lub declare
- zstyle
jest tylko kolejnym z tych „wbudowanych”.
wbudowane i opcje powłoki są zwykle „globalne” w tym sensie, że są ogólnie (ale nie zawsze) stosowane / użyteczne w dowolnym momencie lub kontekście w całym procesie powłoki, lub innymi słowy, ogólnie mają zastosowanie do zsh i wszystkich podsystemów (moduły). Zauważ, że dotyczy to tego, czy powłoka jest wywoływana jako interpreter interaktywny czy nieinteraktywny.
Na przykład możesz użyć wbudowanej source
lub cd
lub opcji powłoki „globstar” będzie obowiązywać w wierszu polecenia lub w case
instrukcji w nieinteraktywnym skrypcie lub w funkcji w tym samym skrypcie.
W przeciwieństwie do innej odpowiedzi powyżej, zstyle
nie jest wbudowanym specyficznym dla modułu „compsys” (system uzupełnień), zstyle
jest wbudowanym „globalnym”.
zstyle
jest zdefiniowany przez zsh/util
moduł, oznacza to po prostu, że kod definiujący sposób analizowania, a „do” zstyle
jest zdefiniowany w zsh/zutil
module.
Równie dobrze możesz zapomnieć o tym fakcie, tj. Bash nie wymaga, abyś wiedział, że kod eval
wbudowanego pliku jest zawarty w pliku eval.c
, ale aby uzyskać pomoc zstyle
, pomaga wiedzieć, że zstyle
jest to wbudowane zdefiniowane w zsh/zutil
module, i dokumentację zsh/zutil
modułu można uzyskać, uruchamiając man zshmodules
.
Tak więc tradycyjnie opcje powłoki były ogólnie „globalne”, ale zgodnie z opisem z man zshmodules
, Niektóre opcjonalne części zsh są w modułach , a także wiele zsh
funkcji zostało napisanych w funkcjach powłoki. (podobnie jak wiele podstawowych i opcjonalnych funkcji vima napisanych w vimscript).
Więc jeśli chcesz określić opcje, które dotyczą tylko tych modułów lub funkcji, jak byś to zrobił?
Cóż, właśnie zstyle
to daje ci możliwość „kierowania” opcjami na znacznie lepszym poziomie niż tradycyjne „globalne” opcje powłoki.
zstyle
osiąga to poprzez argument"pattern"
Przykładowe polecenie, które konfiguruje niektóre opcjonalne zachowania specyficzne dla „compsys”:
zstyle ':completion::complete:lsof:*' menu yes select
i konfigurowanie niektórych opcjonalnych zachowań specyficznych dla „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 '
Ale to nie koniec, zstyles
możliwość targetowania kontekstów jest niesamowicie potężna, na przykład powiedz, że chciałeś zdefiniować pewne zachowanie / opcje dla vcs_info
funkcji, gdy byłeś .git
repozytorium, a nie svn
repozytorium, możesz zmodyfikować wzorzec kontekstu
:vcs_info:<svn_or_whatever_SCM_system>:* <style>
Co z opcjonalnym zachowaniem dla konkretnego projektu z svn
repozytorium? następnie
:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>
Jedyny niejasny opis głupio nazwanego i źle udokumentowanego stylu „(z)”, jaki znalazłem - pochodzi ze słownika From Bash To The Z Shell
style
W
zsh
tym mechanizm stylu jest elastycznym sposobem konfigurowania dodatków powłoki, które używają funkcji, takich jak system uzupełniania i widżety edytora. W przeciwieństwie do zmiennych mogą być różne w różnych kontekstach i w przeciwieństwie do opcji powłoki mogą przyjmować wartości. Mechanizm oparty jest na stylu polecenia.
także w sekcji „Style obsługi” autor dalej rozwija ...
Dzięki bardziej wyrafinowanym funkcjom uzupełniania możesz chcieć umożliwić konfigurację aspektów działania funkcji
style
.... wiele funkcji pomocniczych wyszukuje dla ciebie style, więc twoja funkcja zareaguje na wiele stylów, bez konieczności wykonywania jakiejkolwiek czynności. Aby poznać style wyszukiwane w konkretnej sytuacji, wywołaj funkcję _complete_help z argumentem numerycznym. Zwykle można to zrobić, naciskając, Esc2a następnie Ctrl
-
x h. Jest to szczególnie przydatne podczas konfigurowania zakończenia, ponieważ pozwala zobaczyć, które style są wyszukiwane i powiązany kontekst.
Jedną z najbardziej frustrujących rzeczy w ZSH jest ustalenie, gdzie znaleźć różne polecenia na stronach podręcznika. W tym przypadku dokumentację dla zstyle można znaleźć w man zshmodules
lub tutaj online .
Ta wbudowana komenda służy do definiowania i wyszukiwania stylów. Style to pary nazw i wartości, przy czym wartości składają się z dowolnej liczby ciągów. Są one przechowywane razem z wzorami, a wyszukiwanie odbywa się przez podanie ciągu zwanego „kontekstem”, który jest porównywany z wzorami. Zwrócona zostanie definicja zapisana dla pierwszego pasującego wzorca.
Ogromny brak dobrych przykładów w przestrzeni Zsh, a dokumentacja jest tępa. Spędziłem trochę czasu przyglądając się, jak Prezto używa Zstyle, a także czytając dokumenty i próbując niektórych rzeczy. Zstyle wydaje się być używany głównie w uzupełnieniach, ale w rzeczywistości jest naprawdę dobry do przechowywania danych w sposób bardziej wyrafinowany niż zmienne zwykłego środowiska.
Ta lista pokazuje, jak możesz używać Zstyle do przechowywania i pobierania informacji:
# 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*'