Zsh ऑटो पूरा सुझाव पूर्ण कार्य (_it _vim आदि)


9

मुझे इस बात की थोड़ी झुंझलाहट है कि zshमैं अपने आदेशों के लिए पूरा सुझाव कैसे दे रहा हूं।

यदि मैं एक कमांड की शुरुआत टाइप करता हूं जिसे मैंने इंस्टॉल नहीं किया है और tabइसे दबाएं तो यह पूरा होने वाले फ़ंक्शन को स्थापित करने का सुझाव देगा।

कहते हैं कि मैं निष्पादित करना चाहता हूं vimलेकिन यह स्थापित नहीं है यह सुझाव देगा _vim

क्या इसे बंद करने का कोई तरीका है? या मैंने अपने सेटअप में कुछ गलत किया है?

मेरे सभी डॉटफ़ाइल्स सार्वजनिक हैं github.com/henrikbjorn/castle


मैंने यह व्यवहार पहले देखा है, लेकिन मेरे वर्तमान सेटअप में यह मौजूद नहीं है। अफसोस की बात है कि मुझे कोई सुराग नहीं है, मेरी कौन सी सेटिंग ने उस व्यवहार को बदल दिया।
कस्टमाइज़र

जवाबों:


8

डिफ़ॉल्ट रूप से, zsh का पूरा इंजन केवल आपके द्वारा लिखे गए कुछ को जोड़ने की कोशिश करता है। आपने इसे उपसर्ग जोड़ने के साथ-साथ जोड़ने का प्रयास किया। सरल इंटरेक्टिव पूरा होने वाला कॉन्फ़िगरेशन इंजन ( compinstall) "मिलान नियंत्रण → सबरिंग पूर्णता" के तहत यह प्रदान करता है। यह आपके जैसे एक पंक्ति सम्मिलित करता है .zshrc:

zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'

zstyleअंतर्निहित सेट (अधिकतर) पूरा होने सेटिंग्स। matcher-listपूरा होने शैली तरीके लगातार कोशिश करने के लिए की एक सूची, रोक जब वहाँ कम से कम एक मैच है। खाली स्ट्रिंग का अर्थ है डिफ़ॉल्ट पूर्णता (केवल प्रत्यय)। मिलान नियंत्रण जादू l:|=* r:|=*साधन एक उपसर्ग मिलान का उपयोग करना *और एक प्रत्यय मिलान *, यानी किसी भी उपसर्ग और प्रत्यय।

आप उन उपसर्गों को मना कर सकते हैं जो _पूरी तरह से शुरू होते हैं। यह अभी भी उन शब्दों को पूरा करने की अनुमति देता है _जो उपसर्ग जोड़कर शुरू होते हैं , और पूर्ण होते हैं, लेकिन उपसर्ग के साथ शुरू नहीं हो सकता है _

zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'

यह सभी पूर्णताओं पर लागू होता है, न कि केवल कमांड नामों को पूरा करने पर। मुझे नहीं पता कि इसे कमांड नामों तक कैसे सीमित किया जाए।

इसके साथ शुरू होने वाले कमांड नामों को अधिक सटीक रूप से बाहर करने का एक तरीका होना चाहिए _, लेकिन मुझे नहीं पता कि कैसे। पहली शुरुआत ignored-patternsपूरी होने वाली शैली के साथ है।

zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'       

इसके साथ शुरू होने वाले मैचों को शामिल नहीं करता है _; हालाँकि, अगर कोई मैच नहीं होता है, तो zsh अनदेखी नियमों के बिना फिर से कोशिश करता है। यह अच्छा है कि यदि पहली जगह में अंडरस्कोर के साथ कमांड शुरू हुई, तो यह इस दूसरे पास में पूरा हो जाएगा। बुरा हिस्सा यह है कि zsh इस प्रकार वैसे भी अंडरस्कोर जोड़ने की कोशिश करेगा यदि कोई मैच नहीं है, इसलिए यदि आपके पास है viऔर viewनहीं है vimतो दबाने के Tabबाद viप्रस्ताव देगा viऔर viewनहीं _vim, लेकिन यदि आप टाइप करते हैं vimतो पूरा होने की पेशकश करेगा _vim


धन्यवाद आपके द्वारा निर्दिष्ट समाधानों में से एक को काम करने के लिए लगता है, यह भी कि मैंने जिस तरह से काम करता है, उसके बारे में एक गुच्छा सीखा।
हेनरिक बोज्रोन्स्कोव

2
ignore-patternsमेरे साथ ठीक काम करता है, भले ही कोई मैच न हो। बस यह सुनिश्चित करना था कि completerइसमें शामिल नहीं है _ignored
आदेपन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.