2012-05-10 9 views
20

वहाँ कुछ मुझे भ्रमित जब मैं एक पार्टी के स्वत: पूर्ण समारोह जो मैं /etc/bash_completion.d/अन्य समापन स्क्रिप्ट को प्रभावित किए बिना COMP_WORDBREAKS को रीसेट कैसे करें?

में यह डाल देता हूँ आदेश में कुछ सुविधा प्राप्त करने के लिए लागू है, मैं शब्द तोड़ निकालना चाहते हैं $COMP_WORDBREAKS परिवर्तनीय कॉलन (:) $COMP_WORDBREAKS की शुरुआत में स्लैश (/) जोड़ें।

COMP_WORDBREAKS=" /'><=;|&(" 
_mytool() 
{ 
    local cur=${COMP_WORDS[COMP_CWORD]} 
    compopt -o nospace 

    # my implement here 

    COMPREPLY=($(compgen ..........my_implement......... -- $cur)) 
} 
complete -F _mytool mytool 

हालांकि, मैं COMP_WORDBREAKS सीधे रीसेट नहीं कर सकते क्योंकि मूल्य अन्य पूरा होने स्क्रिप्ट के साथ साझा किया जाता है। जब तक पूरा करने का कार्य कहलाता है, वैरिएबल COMP_WORDS सरणी पहले से ही पॉप्युलेट हो चुकी है, इसलिए स्थानीय रूप से COMP_WORDBREAKS में कोई प्रभाव नहीं पड़ता है।

क्या एक पूर्ण स्क्रिप्ट में COMP_WORDBREAKS बदलने और अन्य स्क्रिप्ट पर कोई प्रभाव नहीं है?

$ echo $BASH_VERSION 
4.2.10(1)-release 

उत्तर

20

परिवर्तन करने से आपका पूरा होने लिपि में $COMP_WORDBREAKS सिफारिश की जिस तरह से (- उदाहरण ssh के लिए के रूप में यह एक वैश्विक चर रहा है और यह अन्य पूरा होने लिपियों के व्यवहार को प्रभावित कर सकता है) नहीं है।

हालांकि, बैश पूर्णता कुछ सहायक तरीकों की पेशकश करती है जिनका उपयोग आप अपने लक्ष्य को प्राप्त करने के लिए कर सकते हैं।

गैर शब्द को तोड़ने पूरा होने के शब्दों में पात्रों को संभालने के लिए सुझाया गया तरीका दो सहायक तरीकों का उपयोग करके है: -n EXCLUDE विकल्प

  • साथ

    • _get_comp_words_by_ref बिना शब्द-टू-पूरा हो जाता है में शब्द के रूप में निकालना पात्रों पर विचार टूट जाता है
  • __ltrim_colon_completions

तो, यहाँ कैसे एक कॉलन संभाल एक करने के लिए की एक बुनियादी उदाहरण है (:) पूरा होने के शब्दों में:

_mytool() 
{ 
    local cur 
    _get_comp_words_by_ref -n : cur 

    # my implementation here 

    COMPREPLY=($(compgen ..........my_implement......... -- $cur)) 

    __ltrim_colon_completions "$cur" 
} 
complete -F _mytool mytool 

अंतिम टिप के रूप में, सहायक विधि /etc/bash_completion में स्थित हैं। प्रत्येक विधि के विस्तृत विवरण को पढ़ने और अधिक सहायक तरीकों को खोजने के लिए अंदर एक नज़र डालें।

+0

आपको बहुत धन्यवाद, यह रूबी पर रूबी में मेरे रेक कार्य पूर्ण होने के लिए वास्तव में उपयोगी था! इसके अलावा, दस्तावेज़ों में अनुभाग E13 को इंगित करने के लिए धन्यवाद। – ndbroadbent

+0

यह केवल ठीक से काम करता है, जब मैं इस पंक्ति को 'cur = "$ {COMP_WORDS [COMP_CWORD]}" '_get_comp_words_by_ref -n से पहले रखता हूं: cur' भी जानना अच्छा होता है, अगर आप भी पिछली बार उपयोग करते हैं, तो आप इसे जोड़ सकते हैं अंत '_get_comp_words_by_ref -n: cur prev' – jmk

+0

जब मेरे पास संदिग्ध समापन होता है और दो बार हिट होता है तो मुझे इस समाधान का उपयोग करते समय मैंने जो लिखा है उसके आधार पर गलत सुझाव प्राप्त होते हैं। Http: // stackoverflow देखें।कॉम/प्रश्न/28479216/कैसे-देना-सही-सुझाव-टू-टैब-पूर्ण-जब-मेरे-शब्द-युक्त-कोलन – toftis

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

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