2014-06-15 7 views
12

सटीक मिलान पसंद करते हैं। मैं ओएच-माय-जेएसएच की आरसी फाइल के साथ zsh का उपयोग कर रहा हूं और कुछ व्यवहार मुझे विशेष रूप से परेशान लगता है। डिफ़ॉल्ट रूप से, ओह-my-zsh को स्वतः-पूर्ण होने पर केस-असंवेदनशील मैचों को वापस करने के लिए कॉन्फ़िगर किया गया है। यह व्यवहार कभी-कभी अच्छा होता है, लेकिन दूसरी बार यह वास्तव में बेकार है। क्या कोई तरीका है कि मैं केस-सेंसिस्टिव मिलान का उपयोग करने के लिए केवल zsh को कॉन्फ़िगर कर सकता हूं जब कोई केस-सेंसिटिव मैचों न हो?में जेएसएच रिटर्न केस-असंवेदनशील ऑटो-पूर्ण मैचों हैं, लेकिन

उदाहरण के लिए, इस मामले केस-संवेदी मिलान का प्रयोग करेंगे:

> ls 
LICENSE.txt lib/ 
> emacs l <-- should autocomplete to lib/ 

इस मामले में, केस-संवेदी स्वत: पूर्ण करने में क्या होगा:

> ls 
README lib/ 
> emacs r <-- should autocomplete to README 

धन्यवाद!

उत्तर

12

बस में ~/निम्न पंक्ति uncomment।zshrc:

# Uncomment the following line to use case-sensitive completion. 
# CASE_SENSITIVE="true" 

यह मेरे लिए काम किया

+1

यह केवल ओह माईश के साथ काम करता है। https://github.com/robbyrussell/oh-my-zsh/blob/master/lib/completion.zsh संपादित करें: ओह, यह ओह माय ज़श के बारे में था ... लेकिन यह जवाब पूरी तरह से आवश्यकताओं को पूरा नहीं करता है। – Yous

20

एक फ़ाइल ~/.oh-my-zsh/custom/better-completion.zsh (यह मानते हुए आप ओह-मेरी-zsh के लिए डिफ़ॉल्ट पथ का उपयोग कर रहे) निम्नलिखित लाइनों

साथ बनाएं
zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 

स्पष्टीकरण: सामान्य रूप में zsh पूरा होने में मैचों के लिए

नियम हैं matcher-list शैली में परिभाषित किया गया है। oh-my-zsh के लिए यह ~/.oh-my-zsh/lib/completion.zsh (एक बार केस-संवेदी और एक बार केस-असंवेदनशील के लिए) में परिभाषित किया गया है। आप इसे वहां बदल सकते हैं लेकिन यदि आप अपना ओएच-my-zsh अपडेट करते हैं तो शायद यह समाप्त हो जाएगा। ~/.oh-my-zsh/custom विशिष्ट रूप से अनुकूलन के लिए है और एक्सटेंशन .zsh के साथ फ़ाइलों को कॉन्फ़िगरेशन के अंत में .oh-my-zsh/oh-my-zsh.sh से लोड किया गया है।

डिफ़ॉल्ट (केस-संवेदी) ओह-मेरी-zsh में matcher-list के लिए सेटिंग्स हैं:

zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 

पहले जो के ऊपरी और निचले मामले विनिमेय को संभालने के लिए कहता है। चूंकि यह पहला नियम है, यह हमेशा प्रत्येक मैच के लिए उपयोग किया जाएगा।

केवल बदलाव की जरूरत

zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' 

इस मामले में प्रयास करने से पहले, वर्तमान शब्द बिल्कुल के रूप में अपनी लिखित पूरा करने वाले पहले की कोशिश करता है (यह matcher-list के लिए zshcompsys(1) में भी पहला उदाहरण है) सरल पूरा करने के लिए '' पहले जोड़ें करने के लिए है असंवेदनशील या अन्य मैचों।

पूरा होने के लिए:

  • दूसरा (मूल) नियम आंशिक पूरा करने के लिए अनुमति देता है ., _ या -, उदा से पहले f.b ->foo.bar
  • तीसरा नियम लिखित पाठ के बाईं तरफ पूरा करने की अनुमति देता है, उदा। bar ->foobar)
+1

तुम भी CASE_SENSITIVE सेट करने के लिए सही करने के लिए मुझे लगता है? –

+0

धन्यवाद @ डिडिबस। मैंने 'if'-clause को हटा दिया है, इसलिए 'CASE_SENSITIVE' की सेटिंग अब और कोई फर्क नहीं पड़ता। मुझे यकीन नहीं है कि मैं फिर क्या सोच रहा था। * ओह-माय-जेएसएच * का अपना व्यवहार 'CASE_SENSITIVE' पर निर्भर करता है, लेकिन जैसा कि हम इसे किसी भी तरह से बदलना चाहते हैं, मूल सेटिंग की जांच करने के लिए यह समझ में नहीं आता है। – Adaephon

+1

आप '' के बाद 'matcher-list' भूल गए': समापन: * '', है ना? – neoascetic

संबंधित मुद्दे