ऊंट मिलान के साथ zsh को स्वतः पूर्ण निर्देशिका नाम में कैसे कॉन्फ़िगर किया जा सकता है?


9

Eclipse और Resharper में फ़ाइलों को नेविगेट करने का एक अच्छा तरीका है।

यदि मेरी वर्तमान निर्देशिका में निम्नलिखित फ़ोल्डर (या फाइलें) हैं

MyReallyLongName
MyReallyLongAndFunName
MyReallyLongAndNotReallyFunName

ग्रहण में मैं केवल बड़े अक्षरों का उपयोग करके उन्हें नेविगेट कर सकता हूं। Zsh में समान रूप से मैं टाइप करने में सक्षम होना चाहता हूं:

सीडी MRLAFN (टैब) (दर्ज करें)

में प्राप्त करने के लिए MyReallyLongAndFunNameएक ही चरण में

अगर मैं अभी zsh के साथ ऐसा करना चाहता हूं, तो मुझे टाइप करना होगा My(Tab)Fun(Tab)(Enter)

जवाबों:


6

यह मेरे लिए काम करता है:

zstyle ':completion:*' matcher-list 'r:[^A-Z0-9]||[A-Z0-9]=** r:|=*' 

फिर मैं एक परीक्षण निर्देशिका में यह कर सकता हूं:

touch MyReallyLongName MyReallyLongAndFunName MyReallyLongAndNotReallyFunName
ls MRLANRFN<TAB>
ls MyReallyLongAndNotReallyFunName

मैंने इसे Zshell उपयोगकर्ता गाइड में युक्तियों से एक साथ जोड़ा


क्या आप यह बता सकते हैं कि मुझे इस एक्सटेंशन (फ़ाइल, फ़ोल्डर) को कहां रखना है? आप इसे zsh- पूर्ति परियोजना में जोड़ने के लिए भी इच्छुक हो सकते हैं ।
JJD

इसे अपने ~ / .zshrc
Cody

यह काफी अपेक्षा के अनुरूप काम नहीं करता है, के साथ AbcAde AdFg HlAkAd, ls AA<TAB>करने के लिए पूरे चले Ad, जब तक मैं AbcAde उम्मीद थी।
अकोलेक

@arekolek "Ad" एक आंशिक समापन है। यदि आप TAB को फिर से हिट करते हैं (आपके zsh कॉन्फ़िगरेशन के आधार पर) तो आप सभी फ़ाइलों को देखेंगे जो मेल खाते हैं। इसमें तीनों फाइलें शामिल होनी चाहिए। फिर आप मेनू चयन के साथ या कंपाइलर का मार्गदर्शन करने के लिए फ़ाइल नाम के कुछ और टाइप करके चुन सकते हैं।
फादर

@arekolek क्षमा करें - मैंने वह गलत पढ़ा। मुझे यकीन नहीं है कि आप वहां से कैसे विज्ञापन में आए। मुझे लगा कि यह एक आंशिक अस्पष्ट मैच था, लेकिन आपके उदाहरण से यह बताना मुश्किल है। क्या दूसरा TAB किसी और परिणाम का उत्पादन करता है?
फॉर्ड

2

मुझे निम्न सामग्री के साथ _camel_caseअपने व्यक्तिगत ~/.zsh/functions folder(किसी भी फ़ोल्डर को जो आपके $fpathचर में है) में एक फ़ाइल जोड़कर "काफी अच्छी तरह" काम करने के लिए यह मिला :

#autoload

[[ -z "$PREFIX" ]] && return 1

relpath=$(dirname $PREFIX)

[[ -e $relpath ]] || return 1

files=$(ls $relpath)

regex=$(echo $(basename $PREFIX) | sed -e 's/\([A-Z][^A-Z]*\)/\1[^A-Z]+/g')

correctedfiles=($(echo $files | grep -P $regex | sed -e :a -e '$!N;s/\n/ /;ta'))

results=($(for file in $correctedfiles; do echo "$relpath/$file"; done))

compadd -U -f -- $results

फिर, मैंने अपने ~ / .zshrc पर निम्न पंक्ति जोड़ी

zstyle ':completion:*' completer _complete _correct _path_files _camel_case

ध्यान दें कि यह संभवतः "अच्छा" समाधान नहीं है क्योंकि मुझे zsh के पूरा होने की प्रणाली का बहुत अधिक ज्ञान नहीं है (केवल कुछ लोगों को वास्तव में, मुझे लगता है), लेकिन यह वही करता है जो आपने अपने प्रश्न में वर्णित किया था।


यह केवल कुछ हद तक काम करता है .. mkdir AaBbCcDd cd ABCD (tab) => cd ./ यानी। स्वतः पूर्ण विफल
रोहित मनोकरण
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.