zstyle
ऐसा लगता है कि यह केवल एक केंद्रीय स्थान है जो डेटा को स्टोर करने और पुनर्प्राप्त करने के लिए एक वैकल्पिक टू- export
गो शेल मापदंडों की तरह है। क्या यह सच है, या इसमें कुछ और भी है?
zstyle
ऐसा लगता है कि यह केवल एक केंद्रीय स्थान है जो डेटा को स्टोर करने और पुनर्प्राप्त करने के लिए एक वैकल्पिक टू- export
गो शेल मापदंडों की तरह है। क्या यह सच है, या इसमें कुछ और भी है?
जवाबों:
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»
और आप कुछ विकल्प देखें। अगले बृहदान्त्र पर टैब-पूर्ण और आप विकल्पों का अगला सेट देखेंगे, आदि।
यह समझने के लिए कि कैसे zstyle
काम करता है, आपको पहले यह समझना होगा कि zsh एक मॉड्यूलर प्रोग्राम है। सेman zshmodules
ज़श के कुछ वैकल्पिक हिस्से मॉड्यूल में हैं, शेल के कोर से अलग हैं। इनमें से प्रत्येक मॉड्यूल को बिल्ड समय पर शेल से जोड़ा जा सकता है, या गतिशील रूप से लिंक किया जा सकता है जबकि शेल इस सुविधा का समर्थन करता है। [...]
इस संबंध में zsh PHP की तरह एक दुभाषिया की तरह अधिक है जहां मुख्य अंतर्निहित कमांड को "कोर" मॉड्यूल में परिभाषित किया गया है, लेकिन अन्य अंतर्निहित कमांड "मॉड्यूल" में निहित हैं।
ठीक है महान, तो फिर क्या "zstyle" है?
zsh, जैसे अन्य गोले में बिलियन कमांड होते हैं, जैसे कि source
, cd
या declare
- zstyle
इन "बिल्डिंस" का सिर्फ एक और एक है।
निर्मित और शेल विकल्प आमतौर पर "वैश्विक" इस अर्थ में हैं कि वे आम तौर पर (लेकिन हमेशा नहीं) लागू होते हैं / शेल प्रक्रिया के दौरान किसी भी समय या संदर्भ में उपयोग करने योग्य होते हैं, या दूसरे शब्दों में, वे आम तौर पर zsh और सभी उप-प्रणालियों पर लागू होते हैं (मॉड्यूल)। ध्यान दें कि क्या यह शेल एक इंटरैक्टिव या गैर-इंटरएक्टिव इंटरप्रेटर के रूप में लागू होता है।
इसलिए, उदाहरण के लिए, आप बिलिन source
या cd
या शेल विकल्प का उपयोग कर सकते हैं "ग्लोबस्टार" यह मान्य होगा कि कमांड प्रॉम्प्ट पर या case
गैर-संवादात्मक स्क्रिप्ट में या उसी स्क्रिप्ट में फ़ंक्शन में है या नहीं।
ऊपर एक अन्य उत्तर के विपरीत, zstyle
एक बिलिन नहीं है जो "कॉम्पिस" (कम्प्लीशन सिस्टम) मॉड्यूल के लिए विशिष्ट है, zstyle
एक "ग्लोबल" बिलिन है।
zstyle
zsh/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>
मूर्खतापूर्ण नामित, और बीमार-प्रलेखित "(z) शैली" का एकमात्र अस्पष्ट वर्णन "मैंने पाया है - बैश टू द जेड शेल की शब्दावली से आता है।
style
में
zsh
, शैली तंत्र शेल ऐड-ऑन को कॉन्फ़िगर करने का एक लचीला तरीका है जो फ़ंक्शन का उपयोग करता है, जैसे कि पूर्ण प्रणाली और संपादक विजेट। चर के विपरीत वे विभिन्न संदर्भों में भिन्न हो सकते हैं और शेल विकल्पों के विपरीत वे मान ले सकते हैं। तंत्र कमांड शैली पर आधारित है।
भी, "हैंडलिंग शैलियाँ" अनुभाग में, लेखक ने आगे बताया ...
अधिक परिष्कृत समापन कार्यों के साथ, आप फ़ंक्शन के व्यवहार के पहलुओं को कॉन्फ़िगर करने योग्य उपयोग करने की अनुमति देना चाह सकते हैं
style
।... कई सहायक कार्य आपके लिए शैलियों को देखते हैं इसलिए आपका कार्य विशेष रूप से कुछ भी करने के लिए आपके फ़ंक्शन के बिना कई शैलियों पर प्रतिक्रिया करेगा। किसी विशेष स्थिति में देखी गई शैलियों का अंदाजा लगाने के लिए, संख्यात्मक तर्क के साथ _complete_help फ़ंक्शन का उपयोग करें। आम तौर पर, आप Esc2इसके बाद दबाकर ऐसा कर सकते हैं Ctrl
-
x h। पूर्ण रूप से कॉन्फ़िगर करते समय यह मुख्य रूप से उपयोगी है क्योंकि यह आपको यह देखने की अनुमति देता है कि शैलियों को क्या देखा जाता है और संबंधित संदर्भ।
ZSH के बारे में सबसे निराशाजनक चीजों में से एक यह पता लगा रहा है कि आदमी के पन्नों में इसके विभिन्न कमांड कहां मिलेंगे। इस मामले में zstyle के लिए प्रलेखन ऑनलाइनman zshmodules
या यहाँ ऑनलाइन पाया जा सकता है ।
इस अंतर्निहित कमांड का उपयोग शैलियों को परिभाषित करने और देखने के लिए किया जाता है। शैलियाँ नामों और मूल्यों की जोड़ी हैं, जहाँ मूल्य किसी भी संख्या में तार से मिलकर होते हैं। उन्हें पैटर्न के साथ एक साथ संग्रहीत किया जाता है और लुकिंग को एक स्ट्रिंग देकर किया जाता है, जिसे 'संदर्भ' कहा जाता है, जिसकी तुलना पैटर्न से की जाती है। पहले मिलान पैटर्न के लिए संग्रहीत परिभाषा वापस कर दी जाएगी।
ज़ीश अंतरिक्ष में अच्छे उदाहरणों की भारी कमी है, और दस्तावेज़ीकरण 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*'