पाइप के प्रतीक से पहले खाने से अंतरिक्ष को कैसे रोकें?


18

जब मैं '|'zsh कमांड लाइन पर पाइप सिंबल के बाद एक स्पेस टाइप करता हूं , तो zsh स्पेस को खा जाता है, पाइप सिंबल को सीधे पहले वाले शब्द के खिलाफ रखकर। मैं इसे करने से कैसे रोकूं? मैं किसी भी संभावित शैलीगत सम्मेलनों के बारे में निश्चित नहीं हूं, लेकिन मुझे पठनीयता के लिए पाइप के प्रतीक के दोनों तरफ एक स्थान पसंद है। मैं ओह-माय-ज़श का बहुत उपयोग कर रहा हूं।

समाधान

नीचे mpy के उत्तर के आधार पर, मैंने निम्नलिखित समाधान का उपयोग किया:

डिफ़ॉल्ट रूप से, ZLE_REMOVE_SUFFIX_CHARS zsh / ohmyzsh में अपरिभाषित है। अपरिभाषित होने पर, यह कार्य करता है जैसे कि यह था:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

मैंने निम्नलिखित परिभाषा अपने ~ / .zshrc में जोड़ दी:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(सभी पाइप को छोड़कर) और presto, एकदम सही! समस्या चली गई।


1
पहले यह प्रयोग करके पुनः प्रयास करें zsh -f(अपने कॉन्फ़िगरेशन को लोड करना छोड़ें)। आप देखेंगे कि zsh अब ऐसा नहीं करेगा। फिर, आपको ओह-माय-ज़श में यह पता लगाने की कोशिश करनी होगी कि यह किस कारण से हो रहा है; ;-)
फ्रांसिस्को

जवाबों:


18

मुझे लगता है कि आप का मतलब है कि जब आप TABएक कमांड / फ़ाइलनाम को पूरा करते हैं तो एक स्थान अपने आप जुड़ जाता है, लेकिन दबाने के बाद |फिर से गायब हो जाता है। अन्यथा मैं उस प्रभाव को पुन: उत्पन्न नहीं कर सकता।

हालांकि, उस मामले में समाधान के रूप में सरल होना चाहिए

ZLE_REMOVE_SUFFIX_CHARS=""

स्पष्टीकरण एक कठिन सा मुश्किल है, इसलिए मैं बस बोली man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS ये पैरामीटर लाइन संपादक द्वारा उपयोग किए जाते हैं। पूरा होने की प्रणाली द्वारा जोड़े गए कुछ परिस्थितियों में प्रत्यय (आमतौर पर स्थान या स्लैश) को स्वचालित रूप से हटा दिया जाएगा, क्योंकि या तो अगला संपादन कमांड एक डालने योग्य वर्ण नहीं था, या क्योंकि वर्ण को हटाने के लिए प्रत्यय की आवश्यकता के रूप में चिह्नित किया गया था।

इन चरों में वर्णों के सेट शामिल हो सकते हैं जो प्रत्यय को हटा देगा। यदि ZLE_REMOVE_SUFFIX_CHARS सेट किया गया है, तो उन वर्णों के कारण प्रत्यय हटा दिया जाएगा; यदि ZLE_SPACE_SUFFIX_CHARSसेट किया जाता है, तो वे वर्ण प्रत्यय हटाए जाएंगे और एक स्थान से बदल दिए जाएंगे।

यदि ZLE_REMOVE_SUFFIX_CHARSसेट नहीं किया गया है, तो डिफ़ॉल्ट व्यवहार इसके बराबर है:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

यदि ZLE_REMOVE_SUFFIX_CHARSसेट किया गया है, लेकिन खाली है, तो किसी भी वर्ण का यह व्यवहार नहीं है। ZLE_SPACE_SUFFIX_CHARS पूर्वता लेता है, ताकि निम्नलिखित:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

पात्रों का कारण बनता है &और |प्रत्यय को हटाने के लिए लेकिन इसे एक स्थान के साथ बदलने के लिए।

अंतर को स्पष्ट करने के लिए, मान लें कि विकल्प AUTO_REMOVE_SLASHप्रभावी है और निर्देशिका डीआईआर को पूरा किया गया है, एक जोड़ा के साथ /, जिसके बाद उपयोगकर्ता प्रकार &। डिफ़ॉल्ट परिणाम है DIR&ZLE_REMOVE_SUFFIX_CHARSसेट के साथ लेकिन &परिणाम शामिल किए बिना DIR/&। परिणाम ZLE_SPACE_SUFFIX_CHARSशामिल करने के लिए सेट के साथ &है DIR &

ध्यान दें कि कुछ पूर्णताएं अपने स्वयं के प्रत्यय हटाने या प्रतिस्थापन व्यवहार प्रदान कर सकती हैं जो यहां वर्णित मूल्यों से आगे निकल जाती हैं।


हां, मैंने इस बात पर ध्यान नहीं दिया था कि जब तक आपने इसका उल्लेख नहीं किया था, लेकिन यह केवल टैब-पूरा होने के बाद होता है, उत्तर के लिए धन्यवाद, इससे मुझे वह
मिलता है जिसकी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.