`Zstyle` क्या करता है?


23

zstyleऐसा लगता है कि यह केवल एक केंद्रीय स्थान है जो डेटा को स्टोर करने और पुनर्प्राप्त करने के लिए एक वैकल्पिक टू- exportगो शेल मापदंडों की तरह है। क्या यह सच है, या इसमें कुछ और भी है?


6
दो कारणों से q को अपग्रेड किया गया; क) गूगल मुझे वैसे भी यहाँ भेजता है; बी) zstyle लगता है कि इसके लिए बहुत कुछ हो रहा है जो "स्टाइल" या ऑटो-पूरा करने के लिए कुछ नहीं करता है। यहाँ एक उत्तर में यह भी बताया गया है कि इस सुविधा का नाम कैसे रखा गया है।
zaTricky

जवाबों:


19

zstyleपूर्ण प्रणाली के लिए स्पष्ट शैली नियंत्रण को संभालता है, लेकिन यह सिर्फ उस से अधिक को कवर करने के लिए लगता है। उदाहरण के लिए, vcs_infoमॉड्यूल आपके संकेत में git स्थिति प्रदर्शित करने के लिए इस पर निर्भर करता है। आप अनुभाग man zshmodulesमें कुछ व्याख्यात्मक पैराग्राफ को देखकर शुरू कर सकते हैं zstyle

आप बस यह देखने के लिए इसे लागू कर सकते हैं कि सेटिंग्स क्या प्रभाव में हैं। यह शिक्षाप्रद हो सकता है।

Zsh बुक पर एक अच्छी अध्याय उपचार है zstyleइसके विभिन्न क्षेत्रों में विस्तार से समझा, भी।

आप .../Completion/अपने सिस्टम पर निर्देशिका में चारों ओर देख सकते हैं कि कैसे उन फ़ाइलों का उपयोग करें zstyle। एक सामान्य स्थान निकट है /usr/share/zsh/functions/Completion/*। मुझे लगता है कि यह मेरे सिस्टम पर 100+ फ़ाइलों में इस्तेमाल किया गया है। उपयोगकर्ताओं ने अक्सर zstyleअपने आसपास ~/.zshrcभी छिड़क लिया है। यहां कुछ अच्छे रंग हैं जो आपके पूर्ण होने के कुछ रंग और विवरण जोड़ते हैं:

# 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'
# ...

यदि आप इसके साथ खेलते हैं तो पूरा होने वाला सिस्टम अधिकांश क्षेत्रों को स्पष्ट करता है। टाइप करने की कोशिश करें zstyle :«tab»और आप कुछ विकल्प देखें। अगले बृहदान्त्र पर टैब-पूर्ण और आप विकल्पों का अगला सेट देखेंगे, आदि।


2
Zsh पुस्तक के लिए लिंक के लिए धन्यवाद, और समापन निर्देशिका के बारे में टिप। Zsh मैनुअल कार्यक्षमता पर बहुत भारी है और उपयोग के मामलों और उदाहरणों पर बहुत हल्का है
शैडोक्तकर

"" कार्यक्षमता पर भारी है और उपयोग के मामलों और उदाहरणों पर बहुत हल्का है "- दुर्भाग्य से प्रोग्रामर द्वारा लिखित अधिकांश सामग्री के लिए मामला है।
आचार्य

9

यह समझने के लिए कि कैसे zstyleकाम करता है, आपको पहले यह समझना होगा कि zsh एक मॉड्यूलर प्रोग्राम है। सेman zshmodules

ज़श के कुछ वैकल्पिक हिस्से मॉड्यूल में हैं, शेल के कोर से अलग हैं। इनमें से प्रत्येक मॉड्यूल को बिल्ड समय पर शेल से जोड़ा जा सकता है, या गतिशील रूप से लिंक किया जा सकता है जबकि शेल इस सुविधा का समर्थन करता है। [...]

इस संबंध में zsh PHP की तरह एक दुभाषिया की तरह अधिक है जहां मुख्य अंतर्निहित कमांड को "कोर" मॉड्यूल में परिभाषित किया गया है, लेकिन अन्य अंतर्निहित कमांड "मॉड्यूल" में निहित हैं।
ठीक है महान, तो फिर क्या "zstyle" है?
zsh, जैसे अन्य गोले में बिलियन कमांड होते हैं, जैसे कि source, cdया declare- zstyleइन "बिल्डिंस" का सिर्फ एक और एक है।

बिल्डरों और शेल विकल्पों का दायरा

निर्मित और शेल विकल्प आमतौर पर "वैश्विक" इस अर्थ में हैं कि वे आम तौर पर (लेकिन हमेशा नहीं) लागू होते हैं / शेल प्रक्रिया के दौरान किसी भी समय या संदर्भ में उपयोग करने योग्य होते हैं, या दूसरे शब्दों में, वे आम तौर पर zsh और सभी उप-प्रणालियों पर लागू होते हैं (मॉड्यूल)। ध्यान दें कि क्या यह शेल एक इंटरैक्टिव या गैर-इंटरएक्टिव इंटरप्रेटर के रूप में लागू होता है।
इसलिए, उदाहरण के लिए, आप बिलिन sourceया cdया शेल विकल्प का उपयोग कर सकते हैं "ग्लोबस्टार" यह मान्य होगा कि कमांड प्रॉम्प्ट पर या caseगैर-संवादात्मक स्क्रिप्ट में या उसी स्क्रिप्ट में फ़ंक्शन में है या नहीं।
ऊपर एक अन्य उत्तर के विपरीत, zstyleएक बिलिन नहीं है जो "कॉम्पिस" (कम्प्लीशन सिस्टम) मॉड्यूल के लिए विशिष्ट है, zstyleएक "ग्लोबल" बिलिन है।

zstylezsh/utilमॉड्यूल द्वारा परिभाषित किया गया है, इसका सीधा अर्थ है कि कोड जो पार्स करने के तरीके को परिभाषित करता है, और मॉड्यूल zstyleमें "डू" को परिभाषित किया गया zsh/zutilहै।
आप बस इस तथ्य को भूल सकते हैं, अर्थात बैश आपको यह जानने की आवश्यकता नहीं है कि evalबिलिन के लिए कोड फ़ाइल में निहित है eval.c, लेकिन इसके लिए सहायता प्राप्त करने के लिए zstyle, यह जानने में मदद करता है कि zstyleयह zsh/zutilमॉड्यूल में परिभाषित एक बेसिन है , और zsh/zutilमॉड्यूल के लिए प्रलेखन को चलाकर पहुँचा जा सकता है man zshmodules

मॉड्यूल या शेल फ़ंक्शन के लिए विशिष्ट विकल्प सेट करना

इसलिए पारंपरिक रूप से शेल विकल्प आमतौर पर "वैश्विक" रहे हैं, लेकिन विवरण के अनुसार man zshmodules, ज़ीश के कुछ वैकल्पिक भाग मॉड्यूल में हैं , और साथ ही, zshशेल फ़ंक्शन में बहुत अधिक कार्यक्षमता लिखी गई है। (विम का बहुत कोर और वैकल्पिक कार्यक्षमता vimscript में कैसे लिखा गया है) के समान है।
तो अगर आप उन विकल्पों को निर्दिष्ट करना चाहते हैं जो इन मॉड्यूल या कार्यों पर लागू होते हैं, तो आप इसे कैसे करेंगे?
ठीक है कि क्या zstyleकरता है, आपको पारंपरिक "वैश्विक" शेल विकल्पों की तुलना में बहुत बेहतर स्तर पर "लक्ष्य" विकल्पों की क्षमता देता है।
zstyleतर्क के माध्यम से इसे प्राप्त करता है"pattern"

एक उदाहरण कमांड जो "compsys" के लिए विशिष्ट कुछ वैकल्पिक व्यवहार को कॉन्फ़िगर करता है:

zstyle ':completion::complete:lsof:*' menu yes select

और "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 '

लेकिन यह वहाँ नहीं रुकता है, zstylesसंदर्भों को लक्षित करने की क्षमता अविश्वसनीय रूप से शक्तिशाली है, उदाहरण के लिए, कहते हैं कि आप vcs_infoसुविधा के लिए कुछ व्यवहार / विकल्पों को परिभाषित करना चाहते थे , जब आप एक .gitरिपॉजिटरी थे , जैसा कि svnरेपो के विपरीत था , तो आप संशोधित कर सकते हैं संदर्भ पैटर्न

:vcs_info:<svn_or_whatever_SCM_system>:* <style>

svnरेपो के साथ एक विशिष्ट परियोजना के लिए वैकल्पिक व्यवहार के बारे में क्या ? फिर

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

8

मूर्खतापूर्ण नामित, और बीमार-प्रलेखित "(z) शैली" का एकमात्र अस्पष्ट वर्णन "मैंने पाया है - बैश टू द जेड शेल की शब्दावली से आता है।

style

में zsh, शैली तंत्र शेल ऐड-ऑन को कॉन्फ़िगर करने का एक लचीला तरीका है जो फ़ंक्शन का उपयोग करता है, जैसे कि पूर्ण प्रणाली और संपादक विजेट। चर के विपरीत वे विभिन्न संदर्भों में भिन्न हो सकते हैं और शेल विकल्पों के विपरीत वे मान ले सकते हैं। तंत्र कमांड शैली पर आधारित है।

भी, "हैंडलिंग शैलियाँ" अनुभाग में, लेखक ने आगे बताया ...

अधिक परिष्कृत समापन कार्यों के साथ, आप फ़ंक्शन के व्यवहार के पहलुओं को कॉन्फ़िगर करने योग्य उपयोग करने की अनुमति देना चाह सकते हैं style

... कई सहायक कार्य आपके लिए शैलियों को देखते हैं इसलिए आपका कार्य विशेष रूप से कुछ भी करने के लिए आपके फ़ंक्शन के बिना कई शैलियों पर प्रतिक्रिया करेगा। किसी विशेष स्थिति में देखी गई शैलियों का अंदाजा लगाने के लिए, संख्यात्मक तर्क के साथ _complete_help फ़ंक्शन का उपयोग करें। आम तौर पर, आप Esc2इसके बाद दबाकर ऐसा कर सकते हैं Ctrl-x h। पूर्ण रूप से कॉन्फ़िगर करते समय यह मुख्य रूप से उपयोगी है क्योंकि यह आपको यह देखने की अनुमति देता है कि शैलियों को क्या देखा जाता है और संबंधित संदर्भ।


2

ZSH के बारे में सबसे निराशाजनक चीजों में से एक यह पता लगा रहा है कि आदमी के पन्नों में इसके विभिन्न कमांड कहां मिलेंगे। इस मामले में zstyle के लिए प्रलेखन ऑनलाइनman zshmodules या यहाँ ऑनलाइन पाया जा सकता है ।

इस अंतर्निहित कमांड का उपयोग शैलियों को परिभाषित करने और देखने के लिए किया जाता है। शैलियाँ नामों और मूल्यों की जोड़ी हैं, जहाँ मूल्य किसी भी संख्या में तार से मिलकर होते हैं। उन्हें पैटर्न के साथ एक साथ संग्रहीत किया जाता है और लुकिंग को एक स्ट्रिंग देकर किया जाता है, जिसे 'संदर्भ' कहा जाता है, जिसकी तुलना पैटर्न से की जाती है। पहले मिलान पैटर्न के लिए संग्रहीत परिभाषा वापस कर दी जाएगी।


यह सबसे अच्छा उत्तर है क्योंकि यह डॉक्स से जोड़ता है। मुझे यह सीखने की ज़रूरत थी कि zstyle से कैसे पढ़ना है। अन्य उत्तर केवल सेटिंग शैलियों को संबोधित करते हैं।
जुलाहा

1

ज़ीश अंतरिक्ष में अच्छे उदाहरणों की भारी कमी है, और दस्तावेज़ीकरण obtuse है। मैंने कुछ समय यह देखने में बिताया कि प्रेज़्टो कैसे zstyle का उपयोग करता है, साथ ही डॉक्स को पढ़ता है और कुछ चीजों की कोशिश कर रहा है। zstyle मुख्य रूप से पूर्णता में उपयोग किया जाता है, लेकिन वास्तव में डेटा को स्टोर करने के लिए वास्तव में अच्छा है जो सादे-पुराने-पर्यावरण चर की तुलना में अधिक परिष्कृत है।

यह पता चलता है कि आप जानकारी संग्रहीत करने और पुनर्प्राप्त करने के लिए zstyle का उपयोग कैसे कर सकते हैं:

# 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*'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.