सवाल फ़ोल्डर से तर्क के कमांड टैब पूर्णता


क्या किसी फ़ोल्डर की फ़ाइलों के आधार पर कमांड के लिए पूर्णता की सूची बनाना संभव है?

मान लें कि मैं अपनी परियोजनाओं में से एक पर सब्लिमे टेक्स्ट 2 चलाने के लिए चाहता हूं, जिसे सहेजा जाता है ~/sublime_projects/*.sublime-project। वांछित व्यवहार:

 subl<tab><tab>
   foo bar project2

अगर वहाँ हैं foo.sublime-project, bar.sublime-project, project2.sublime-project में फाइलें ~/sublime_projects


4
2017-08-24 09:06


मूल




जवाब:


आप निम्न बैश फ़ंक्शन का उपयोग कर सकते हैं, इसे आप में जोड़ें .bashrc

PROJECTS_DIR चर के लिए निर्देशिका पथ नोट करें

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR="*.sublime-project"
    cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${LOOK_FOR})
    COMPREPLY=( $(compgen -W "${PROJECTS}" -- $cur) )
}
complete -F _subl subl

यह क्या करता है:

  • जब आप टाइप करते हैं subl TAB TAB TAB यह परियोजनाओं निर्देशिका में सभी परियोजनाओं की सूची है

  • जब आप टाइप करते हैं subl ANY_LETTER TAB यह ऑटो परियोजना प्रोजेक्ट नाम को पूरा करता है अगर ANY_LETTER_TAB परियोजना के पहले चरित्र के साथ मेल खाता है।

उदाहरण के लिए यदि आपके अंदर है ~/projects निम्नलिखित: test.sublime-project तथा foo.sublime-project और टाइप करें subl t TAB टर्मिनल में आपको मिलेगा subl test.sublime-project

अद्यतन करें लिपि भाई बदल नहीं है PWD मैं दोनों भविष्य के संदर्भ के लिए छोड़ रहा हूँ।

# bash completion for sublime projects in ~/projects
_subl()
{
    local cur=${COMP_WORDS[COMP_CWORD]}
    PROJECTS_DIR="/home/mreq/projects/"
    LOOK_FOR=".sublime-project"
    # cd ${PROJECTS_DIR}
    PROJECTS=$(ls ${PROJECTS_DIR} | grep "^${cur}.*${LOOK_FOR}")
    COMPREPLY=${PROJECTS_DIR}${PROJECTS}
}
complete -F _subl subl

दूसरी लिपि के बाद एक टाइप किए गए चरित्र की तलाश है subl और इसे मिलान किए गए फ़ाइल नाम के पूर्ण पथ से बदल देता है। उदाहरण के लिए यदि कोई है test.sublime-project में ~/projects टाइप करके subl t द्वारा प्रतिस्थापित किया जाएगा subl /home/USERNAME/projects/test.sublime-project


4
2017-08-24 11:32



आश्चर्यजनक, ठीक वही जो मैं खोज रहा था। धन्यवाद। - mreq
एक बात: यह आपके बदलता है $PWD सेवा मेरे $PROJECTS_DIR। क्या वर्तमान को रखने का कोई तरीका है? मैंने इसे सहेजने और बाद में बहाल करने की कोशिश की COMPREPLY असाइनमेंट, लेकिन यह काम नहीं किया। - mreq
संपादन के लिए धन्यवाद! दुर्भाग्यवश, दूसरी लिपि खाली के साथ काम नहीं करती है <tab> परियोजनाओं के पूरा होने। पहले का उपयोग करना - यह अजीब है, वह टाइपिंग cd - के बाद $PWD परिवर्तन किया गया था आप वापस जहां आप थे वहां वापस नहीं मिलता है। - mreq
यह आपको वापस नहीं लाएगा क्योंकि लिपि वापस आती है। दूसरी लिपि के लिए, आप परियोजनाओं को सूचीबद्ध करने के लिए वाइल्डकार्ड * और टैब को सब्सक्राइब कर सकते हैं लेकिन अच्छे दिखने वाले तरीके से नहीं। व्यक्तिगत रूप से मैं पहली लिपि पसंद करते हैं। - Stef K