bash - क्या बाश टैब-पूर्ण स्क्रिप्ट का उपयोग zsh में किया जा सकता है?




tab-completion (4)

मैं एंटीगन को ओह-माय-ज़ेड प्लगइन मैनेजर के रूप में चला रहा हूं। मेरे पास सहकर्मियों द्वारा लिखी गई कुछ बैश पूर्ण स्क्रिप्ट थीं जिन्हें मैं एक साधारण source /path/to/completion साथ Zsh में लोड करना चाहता था।

मुझे थोड़ी परेशानी हुई, क्योंकि ऐसा लगता है कि एंटीजन या ओएमजेड (बताने में कठिन) चिंता को अपने प्लगइन्स से केवल लोडिंग पूर्ण स्क्रिप्ट के साथ ही करते हैं। मैं अंत में antigen apply होने के बाद compinit bashcompinit और compinit द्वारा इसके चारों ओर मिला। बस bashcompinit पर्याप्त नहीं था।

source ~/.antigen/antigen.zsh
antigen use oh-my-zsh
antigen apply

autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit

source /path/to/bash_completion

प्रतिजन $ANTIGEN_COMPDUMP पर अपनी .zcompdump फ़ाइल बनाता है जो मेरे लिए ~/.antigen/.zcompdump था।

कंपिटिट और बैशपिनिट का पुन: आह्वान $HOME/.zcompdump पर एक दूसरा .zcompdump $HOME/.zcompdump

ऐसा लगता है कि सभी लोग काम करते हैं, क्योंकि मैं /path/to/bash_completion द्वारा निर्धारित पूर्णताओं का उपयोग करने में सक्षम /path/to/bash_completion । मैंने दोनों .zcompdump फ़ाइलों को हटा दिया है यह सुनिश्चित करने के लिए कि उन्हें फिर से बनाने और काम करने के लिए कुछ समय मिल गया है।

मैं एक मशीन रिबूट के बाद कुछ बार .zcompdump फ़ाइलों को rm करना पड़ा है क्योंकि त्रुटियों को पूरा करने के लिए जब टैब को पूरा करने की कोशिश की जाती है, लेकिन मैं अनिश्चित हूं अगर यह इस सेट अप या कुछ और के कारण है। rm ~/.zcompdump && rm $ANTIGEN_COMPDUMP और मेरे लिए एक नया शेल ठीक करता है।

लेखन के समय उपयोग किए जाने वाले संस्करण:

Antigen = v2.2.3 = d3d4ee0
Oh-my-zsh = c3b072e
Zsh = 5.3

मेरे पास Apache's Hadoop की बैश टैब-पूर्ण स्क्रिप्ट है। आम तौर पर, मैं अपने दिन-प्रतिदिन के खोल के रूप में zsh का उपयोग करता हूं। जब मुझे इसकी आवश्यकता होती है, तो यह बहुत ही हरा-भरा हो जाता है, लेकिन ऐसा लगता है कि टैब-पूरा करने वाले सिस्टम उनके बीच मौलिक रूप से भिन्न हैं। क्या zash में काम करने के लिए मौजूदा बैश-टैब-पूर्ण परिभाषाओं को "परिवर्तित" करने का एक सरल तरीका है? मैं इसमें एक टन भी निवेश नहीं करना चाहता, लेकिन अगर यह आसान है तो मैं मध्यम मात्रा में प्रयास करूंगा।


इस पृष्ठ से (दिनांक २०१०/०१/०५):

Zsh पार्टीशन फंक्शन को हैंडल कर सकता है। Zsh के लेटेस्ट डेवलपमेंट वर्जन में एक फंक्शन bashcompinit है, जो रन होने पर zsh को bash पूरा करने के स्पेसिफिकेशन्स और फंक्शन को पढ़ने की अनुमति देगा। यह zshcompsys मैन पेज में प्रलेखित है। इसका उपयोग करने के लिए आपको कॉम्पिटिट के बाद किसी भी समय bashcompinit चलाना होगा। यह बाश बिल्डिंस के अनुरूप पूर्ण और कम्पेन कार्यों को परिभाषित करेगा।


autoload -U +X compinit && compinit
autoload -U +X bashcompinit && bashcompinit
source /path/to/your/bash_completion_script

मैं zsh zsh 5.0.2 (x86_64-apple-darwin13.0) बिना किसी ~ zsh 5.0.2 (x86_64-apple-darwin13.0) चला रहा हूं और ऊपर के अनुक्रम ने एक ताज़ा स्पशेड zsh शेल में काम किया है।

संकेत के लिए git-complete.bash स्क्रिप्ट के लिए धन्यवाद: D

उपरोक्त 3 पंक्तियों के बारे में अधिक जानकारी के लिए पढ़ें:

बैश में बिल्ट ऑटो सपोर्ट का कमाल है, लेकिन बैश ऑटोकॉम्पटेड स्क्रिप्ट्स सीधे zsh काम नहीं करती हैं क्योंकि zsh एनवायरनमेंट में compgen , compgen जैसे आवश्यक बैश compgen हेल्पर फंक्शन नहीं होते हैं। यह zsh सत्र को तेज रखने के प्रयास में ऐसा करता है।

इन दिनों zsh को compinit और bashcompinit जैसी उपयुक्त पूर्ण लिपियों के साथ भेजा जाता है, compinit बैश स्वतः पूर्ण स्क्रिप्ट का समर्थन करने के लिए आवश्यक कार्य होते हैं।

autoload <func_name> : ध्यान दें कि ऑटोलैड को zsh में परिभाषित किया गया है न कि बैश करने के लिए। fpath एक फाइल को खोजता है जिसका नाम डाइरेक्टरी पाथ में दिया गया है जिसे fpath कमांड द्वारा fpath गया है और जब इसे पहली बार fpath किया जाता है तो इसे लोड करने के लिए एक फंक्शन को चिन्हित करता है।

  • -U: कंपिनिट या बाशपिनिट जैसे फंक्शन को लोड करते समय किसी भी एलियास को इग्नोर करें
  • + X: नामांकित फाउ को अभी लोड करें और इसे निष्पादित न करें

उदाहरण के लिए मेरे सिस्टम पर echo $fpath रिटर्न /usr/share/zsh/site-functions और /usr/share/zsh/5.0.5/functions और compinit और bashcompinit दोनों compinit /usr/share/zsh/site-functions bashcompinit पर उपलब्ध हैं /usr/share/zsh/5.0.5/functions

इसके अलावा अधिकांश लोगों के लिए केवल autoload -U +X bashcompinit && bashcompinit की आवश्यकता हो autoload -U +X bashcompinit && bashcompinit है क्योंकि कुछ अन्य स्क्रिप्ट जैसे गिट autoload -U +X bashcompinit && bashcompinit या उनके अपने ~/.zshrc autoload -U +X compinit && compinit , लेकिन यह सिर्फ दोनों चलाने के लिए सुरक्षित है। उनमें से।


autoload bashcompinit
bashcompinit
source /path/to/your/bash_completion_file




tab-completion