Czym zajmuje się „zstyle”?


23

zstylewyglą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?


6
Poparł q z dwóch powodów; a) mimo to Google wysyła mnie tutaj; b) wygląda na to, że zstyle ma na to dużo ochoty , co wydaje się nie mieć nic wspólnego z „stylem” lub automatycznym uzupełnianiem. Jedna z odpowiedzi tutaj komentuje nawet, jak strasznie się nazywa ta funkcja.
zaTricky

Odpowiedzi:


19

zstyleobsługuje oczywistą kontrolę stylu dla systemu uzupełniania, ale wydaje się, że obejmuje więcej niż tylko to. Na przykład vcs_infomoduł polega na tym w celu wyświetlenia statusu git w pytaniu. Możesz zacząć od spojrzenia na kilka wyjaśniających akapitów man zshmodulesw tej zstylesekcji.

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ż zstyleopryskują 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.


2
Dzięki za link do książki Zsh i wskazówkę dotyczącą katalogu Completion. Podręcznik Zsh jest bardzo funkcjonalny i bardzo lekki w przypadkach użycia i przykładach
shadowtalker

„... ma dużą funkcjonalność i bardzo mało przypadków użycia i przykładów” - niestety tak jest w przypadku większości materiałów napisanych przez programistów.
aaaaaa,

9

Aby właściwie zrozumieć, jak zstyledział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, cdlub declare- zstylejest tylko kolejnym z tych „wbudowanych”.

Zakres wbudowanych opcji i opcji powłoki

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 sourcelub cdlub opcji powłoki „globstar” będzie obowiązywać w wierszu polecenia lub w caseinstrukcji w nieinteraktywnym skrypcie lub w funkcji w tym samym skrypcie.
W przeciwieństwie do innej odpowiedzi powyżej, zstylenie jest wbudowanym specyficznym dla modułu „compsys” (system uzupełnień), zstylejest wbudowanym „globalnym”.

zstylejest zdefiniowany przez zsh/utilmoduł, oznacza to po prostu, że kod definiujący sposób analizowania, a „do” zstylejest zdefiniowany w zsh/zutilmodule.
Równie dobrze możesz zapomnieć o tym fakcie, tj. Bash nie wymaga, abyś wiedział, że kod evalwbudowanego pliku jest zawarty w pliku eval.c, ale aby uzyskać pomoc zstyle, pomaga wiedzieć, że zstylejest to wbudowane zdefiniowane w zsh/zutilmodule, i dokumentację zsh/zutilmodułu można uzyskać, uruchamiając man zshmodules.

Ustawianie opcji specyficznych dla modułu lub funkcji powłoki

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 zshfunkcji 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 zstyleto daje ci możliwość „kierowania” opcjami na znacznie lepszym poziomie niż tradycyjne „globalne” opcje powłoki.
zstyleosią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, zstylesmożliwość targetowania kontekstów jest niesamowicie potężna, na przykład powiedz, że chciałeś zdefiniować pewne zachowanie / opcje dla vcs_infofunkcji, gdy byłeś .gitrepozytorium, a nie svnrepozytorium, możesz zmodyfikować wzorzec kontekstu

:vcs_info:<svn_or_whatever_SCM_system>:* <style>

Co z opcjonalnym zachowaniem dla konkretnego projektu z svnrepozytorium? następnie

:vcs_info:<svn_or_whatever_SCM_system>:*:repo-root-name <style>

8

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 zshtym 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.


2

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 zshmoduleslub 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.


To najlepsza odpowiedź, ponieważ zawiera linki do dokumentów. Potrzebowałem tego, aby nauczyć się czytać ze zstyle. Pozostałe odpowiedzi dotyczą wyłącznie stylów ustawień.
cbarrick

1

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*'
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.