स्वतः पूर्ण अनुक्रमणिका (या जो कुछ भी कहा जाता है) और बायनेरिज़ को $ PATH कैश में zsh में पुन: बनाएँ


75

नए सॉफ़्टवेयर को स्थापित करने के बाद, पहले से ही खुले हुए zsh वाले टर्मिनल को नए कमांड के बारे में पता नहीं चलेगा और वे उन लोगों के लिए ऑटो-पूर्ण उत्पन्न नहीं कर सकते हैं। स्पष्ट रूप से एक नया टर्मिनल खोलने से समस्या ठीक हो जाती है, लेकिन क्या सूचकांक (या जिसे आप इसे कहते हैं) को फिर से बनाया जा सकता है ताकि पुराने टर्मिनल पर ऑटो-पूर्ण काम हो सके?

मैंने कोशिश की compinitलेकिन इससे कोई फायदा नहीं हुआ। इसके अलावा, क्या कोई ऐसा तरीका है जो शेल-निर्भर नहीं है? उत्तर को भी सत्यापित करने का तरीका अच्छा है (कुछ की स्थापना रद्द करने और इसे पुनः स्थापित करने के अलावा)।

कमांड के नाम के कुछ अक्षर टाइप करने के बाद मेरा क्या मतलब है, मैं दबा सकता हूं Tab, और zshबाकी पूरा नाम खींचने के लिए बाकी काम करना चाहिए।


1
ऑटो-कम्पलीट होने के दो प्रकार हैं, जब आप कहते हैं कि एक मौजूदा शेल "[नए कमांड] के लिए ऑटो-पूर्ण उत्पन्न नहीं कर सकता है": "कमांड पूरा करना" - पूरा होने पर नए कमांड के नाम का सुझाव देने के लिए शेल प्राप्त करना। कमांड पोजीशन में, और "वाद-विवाद पूर्णता" - जब आप पहले ही अपना नाम टाइप कर चुके हों, तो नए कमांड के लिए विकल्प / तर्क देने के लिए शेल प्राप्त करने की कोशिश करें। जो आपको समस्याएं दे रहा है?
क्रिस जॉन्सन

1
अच्छा प्रश्न! मैं हमेशा से ही मान लिया था यह किया नहीं जा सका, मैं जाँच करने के लिए नहीं लगता था
माइकल Mrozek

1
ऑफटॉपिक - लोग इतने चंचल होते हैं कि 4 लोग फेवरेट होते हैं लेकिन केवल 2 अपवोट ... मुझे यह अजीब लगता है कि कितने लोग चीजों को अपवोट करते हैं।
xenoterracide

@ क्रिस का मतलब है कमांड के नाम और प्रेस टैब के कुछ अक्षर टाइप करने के बाद, zsh को बाकी काम करना चाहिए और पूरा नाम ऊपर खींचना चाहिए।
फिन्हेे

@xeno मैंने उस पर भी ध्यान दिया; यह किसी चीज़ को पसंद करने के लिए बहुत ही असामान्य है, लेकिन इसे उखाड़ फेंकना नहीं है
माइकल Mrozek

जवाबों:


76

निष्पादन योग्य आदेशों के कैश का पुनर्निर्माण करने के लिए, का उपयोग करें rehashया hash -rf

सुनिश्चित करें कि आपने hash_list_allविकल्प को अनसेट नहीं किया है (यह बहुत कम डिस्क एक्सेस का कारण बनता है लेकिन कैश अपडेट को कम बार बनाता है)।

यदि आप एक कमांड टाइप नहीं करना चाहते हैं, तो आप अपने कैश में निम्नलिखित लाइन लगाकर पूरा करने पर zsh को इसके कैश पर भरोसा नहीं करने के लिए कह सकते हैं ~/.zshrc:

zstyle ":completion:*:commands" rehash 1

एक प्रदर्शन लागत है, लेकिन यह आज एक विशिष्ट डेस्कटॉप सेटिंग पर नगण्य है। (ऐसा नहीं है यदि आपके पास $PATHएनएफएस, या राम-भूखा सिस्टम है।)

zstyleआदेश अपने आप में प्रलेखित है zshmoduleआदमी पेज। शैलियों मूल्यों में दर्ज कर रहे हैं zshcompsysऔर zshcompwidआदमी पृष्ठों, या आप (यहाँ, के स्रोत पढ़ सकते हैं _command_namesसमारोह)। यदि आप कुछ पठनीय प्रलेखन चाहते थे ... यदि आप कुछ पाते हैं, तो मुझे बताएं!

¹ zsh¹4.3.3 की आवश्यकता है, धन्यवाद क्रिस जॉन्सन


3
या तो पुनर्वसन में कमी के कारण "नए कमांड" के कमांड-नेम को पूरा करने में सक्षम होना चाहिए जो पहले पूरी तरह से हैशेड थे। PATH (या पथ) सेट करने से भी एक rehash होगा; इस प्रकार PATH="$PATH"काम भी करेगा। HASH_LIST_ALLमेरे दस्तावेज़ में डिफ़ॉल्ट के रूप में दिखाया गया है।
क्रिस जॉन्सन

यही मेरे लिए जवाब है।
बैजिफ़ेगॉन्ग

13

यदि आपको नई कमांड के लिए "तर्क पूर्ण" होने में समस्या आ रही है, तो कम्पिनिट संभवतः वह कमांड है जिसकी आपको आवश्यकता है, हालांकि इसमें एक कैशिंग तंत्र है जो आपकी समस्या का कारण हो सकता है।

मेरे संस्करण के लिए प्रलेखन (4.3.10) का कहना है कि कंपिनिट एक कैश्ड "डंप फ़ाइल" का उपयोग करता है .zcompdump, संकलित पूरा होने वाले कार्यों को बाद के इनवोकेशन को गति देने के लिए। यह केवल डंप फ़ाइल को अमान्य करता है जब यह पूरा होने वाली फ़ाइलों की संख्या ( fpathतत्व फ़ाइल जो शुरू होती है #compdef …या #autoload …) से बदल जाती है। संभवतः नए सॉफ़्टवेयर को स्थापित करने से इस तरह की पूर्ण होने वाली फ़ाइलों की संख्या बदल जाएगी (यह मानते हुए कि यह सही जगह पर अपनी zsh ऑटो-पूर्ण फ़ाइलों को स्थापित करता है), इसलिए मुझे compinitकाम करने के लिए एक सादे की उम्मीद होगी । यदि आप ऐसी स्थिति में हैं जहां यह काम नहीं करता है तो आपको डंप फ़ाइल को बायपास या मैन्युअल रूप से अमान्य करना पड़ सकता है।

डंप फ़ाइल का उपयोग करने को छोड़ने के लिए, उपयोग करें compinit -D; यह केवल वर्तमान शेल को प्रभावित करेगा।

डंप फ़ाइल के पुनर्निर्माण के लिए, इसे हटा दें और पुन compinit: चलाएँ :

rm -i ${ZDOTDIR:-${HOME:?No ZDOTDIR or HOME}}/.zcompdump &&
compinit

यह वर्तमान शेल, मौजूदा गोले जो कि सादा चलता है compinit, और भविष्य के किसी भी शेल को प्रभावित करेगा ।


कुछ zsh चौखटे की तरह zimप्रति मेजबान डंप फ़ाइलों के उपयोग की अनुमति देते हैं। उस स्थिति में, $zcompdump_fileसाथ में भी निकालें .zcompdump
सेबस्टियन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.