zsh पूरा होना: एक विशिष्ट निर्देशिका से फ़ाइल नाम प्राप्त करना


10

ठीक है, एक छोटी सी पृष्ठभूमि: मैं एक मैक का उपयोग करता हूं, और सीएलआई में जितना संभव हो उतना संभव है।

विशेष रूप से, मैं अक्सर एक यूएसबी स्टिक, cpया mvएक फ़ाइल पर पॉप करता हूं , और फिर तुरंत इसे अस्वीकार करना चाहता हूं (इसे अनमाउंट और डिस्कनेक्ट करता हूं)। यह आम तौर पर मुट्ठी भर कीस्ट्रोक्स में पूरा किया जा सकता है, इसे छोड़कर, जिसमें (10.7 में) एक खाली डेस्कटॉप स्थान पर जाने की आवश्यकता होती है (आमतौर पर दो स्थान कम से कम), डिस्क का चयन, और "कमांड-ई" दबाकर। सच कहूँ तो, यह अनमाउंट प्रक्रिया, परिमाण के कई आदेशों द्वारा, प्रक्रिया का सबसे अधिक समय लेने वाला और थकाऊ हिस्सा है।

यह केवल कहने के लिए सक्षम होने के लिए कहीं अधिक प्राकृतिक और कुशल होगा:

ej<tab> J<tab>

मेरा USB स्टिक माउंट / वॉल्यूम / जेफरसन पर बोलें। मैं अपने 6 कीस्ट्रोक्स से जो पाने की उम्मीद करूंगा वह निम्नलिखित है:

eject /Volumes/Jefferson

यह कमांड चलना चाहिए:

diskutil unmount /Volumes/Jefferson

इसलिए, मैंने एक अच्छा सा फंक्शन लिखा है:

eject() {
    diskutil unmount /Volumes/$1
}

और इसके साथ जाने के लिए एक पूर्ण कार्य:

compdef '_files -g "/Volumes/*"' eject  

हालांकि, इसके साथ एक समस्या है। _filesसमारोह पूरा पथ उत्पन्न करता है। अब, मैं अपने "इजेक्ट" फंक्शन में लाइन को बदल सकता था diskutil unmount $1और चीजें काम करेंगी, लेकिन तब मेरे पास माउंट पॉइंट नाम के पहले अक्षर को टाइप करने की कोई क्षमता नहीं है, क्योंकि पथ / वॉल्यूम / के साथ शुरू होता है। उदाहरण के लिए, यदि मैं टाइप करता हूं, तो मुझे J<tabPWD में फ़ाइलों के लिए स्वतः पूर्णता प्राप्त होगी। मुझे /Volumes/J<tab>वांछित पूर्णता प्राप्त करने के लिए टाइप करना होगा ।

तो, क्या एक पूर्ण कार्य है जो पूर्ण पथ उत्पन्न करने के बजाय पूर्वनिर्धारित, विशिष्ट स्थान से फ़ाइल नाम देता है?

मैं वास्तव में 6 कीस्ट्रोक्स के लिए इसे नीचे लाना चाहता हूं।

जवाबों:


12
_files -W /Volumes

का प्रलेखन देखें _path_files


उत्तम! मुझे पता था कि इसमें निर्माण करना होगा। बहुत बहुत धन्यवाद!
मार्शल Eubanks

तो, मैं इसे पूर्ण होने वाले फ़ंक्शन के लिए कैसे प्राप्त कर सकता हूं? मैंने अपने fpath में स्थित compdefफ़ाइल में लाइन डालने की कोशिश की _eject। मैंने ऑटोलैड लाइन के साथ और इसके बिना कोशिश की। मैंने पूरा होने वाले कार्यों के बारे में कई गाइडों को देखा और किसी ने भी इस तरह से एक वास्तविक सरल उदाहरण को कवर नहीं किया, और मैंने उनके द्वारा किए गए किसी भी उदाहरण के आधार पर कुछ भी नहीं किया।
मार्शल Eubanks

@marshaul आपको #compdef ejectफ़ाइल की पहली पंक्ति के रूप में वास्तविक कोड की आवश्यकता है। मैनुअल में ऑटोलॉइड फ़ाइलों के तहत देखें । यदि आप पहली बार में लाइन नहीं जोड़ते हैं, तो आपको ~/.zcompdumpzsh को कैश इन और रीस्टार्ट करना पड़ सकता है।
गिल्स एसओ- बुराई को रोकना '

आह! डिलीट करने का ~/.zcompdumpकाम किया। एक बार फिर धन्यवाद!
मार्शल Eubanks
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.