2012-05-22 18 views
5

मैं इस तरह एक समारोह के आधार पर कार्य:Zsh स्वत: पूर्ण 2 तर्कों

p() { cd ~/Clients/$1/Projects/$2; } 

तो मैं लिख सकते हैं:

p "Client here" "Project here" 

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

~/Clients/Client here/Projects/Project here 

कुछ भी नहीं है विशेष यहाँ जा रहा है। लेकिन मैं इस समारोह के लिए स्वतः पूर्ण कैसे कार्यान्वित करूं?

_p() { _files -W ~/Clients -/; } 
compdef _p p 

लेकिन मैं दूसरा तर्क कैसे स्वत: पूर्ण है (परियोजनाओं): मैं पहले तर्क के लिए स्वतः पूर्ण काम (ग्राहकों) पाने में कामयाब रहे? यह ग्राहक के आधार पर फ़ोल्डर से स्वतः पूर्ण करने की आवश्यकता है:

आशा किसी को मदद कर सकते हैं! :-)

उत्तर

6

एक चतुर व्यक्ति (Mikachu) आईआरसी पर बाहर की मदद की:

p() { cd ~/Clients/$1/Projects/$2; } 
_p() { 
    _arguments '1: :->client' '2: :->project' 
    case $state in 
    client) 
     _files -W ~/Clients 
    ;; 
    project) 
     _files -W ~/Clients/$words[CURRENT-1]/Projects 
    ;; 
    esac 
} 
compdef _p p 

अद्यतन: $ करने के लिए बदलें $ शब्द [वर्तमान -1] {(क्यू) शब्द [वर्तमान -1]} इसे रिक्त स्थान वाली निर्देशिकाओं के साथ काम करने के लिए:

p() { cd ~/Clients/$1/Projects/$2; } 
_p() { 
    _arguments '1: :->client' '2: :->project' 
    case $state in 
    client) 
     _files -W ~/Clients 
    ;; 
    project) 
     _files -W ~/Clients/${(Q)words[CURRENT-1]}/Projects 
    ;; 
    esac 
} 
compdef _p p