अतिरिक्त स्थानों के साथ ऑटो-बैश को पूरा करें - क्यों, और कैसे ठीक करें?


29

मैं टाइपिंग पत्रों से अधिक टैब पूर्णता का उपयोग करता हूं। मैं टाइप करता था rm ~/De<TAB>और इसे पूरा किया जाएगा rm ~/Desktop/ताकि मैं अगले स्तर पर रह सकूं।

हाल ही में, वह व्यवहार बदल गया। पूर्ण होने पर अब पैदावार होती है rm ~/Desktop<SPACE>, जिसका अर्थ है कि यदि मुझे जारी रखना है तो मुझे बैकस्पेस और स्लैश टाइप करना होगा। इससे मुझे रोना आ रहा है।

इन परिवर्तनों को फ़ंक्शन _longopt()में स्थित होना प्रतीत होता है /etc/bash_completion, हालाँकि यह उतना ही है जितना मैं अनुसरण कर सकता हूं। क्या यह परिवर्तन जानबूझकर किया गया है, और यदि ऐसा है, तो इसके लिए क्या अच्छा है? क्या मैं पुराने व्यवहार को वापस ले सकता हूं, अधिमानतः किसी अन्य सिस्टम से पुराने कोड को कॉपी करने के बजाय एक कॉन्फिगर विकल्प द्वारा?

संपादित करें: संदर्भ के लिए फ़ंक्शन।

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "$1" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}

एकमात्र तरीका जो मैं देख सकता था कि यह समझ में आता है अगर ~ / डेस्कटॉप एक फ़ाइल या खाली निर्देशिका है। और दूसरे मामले में, यह केवल कमांड के लिए उपयोगी है rmdir, जैसे mkdirया नहीं touch
l0b0

क्या आप अपने _longopt()फंक्शन की बॉडी पोस्ट कर सकते हैं ?
अलेक्सांद्र लेवचुक

@ एम्पी: अवगत होना चाहिए कि पूरा होना कमांड पर निर्भर करता है (कमांड लाइन का पहला शब्द)। इसके अलावा, यह readlineसेटिंग्स पर निर्भर करता है (आपके पास एक ~/inputrcफ़ाइल है?) और इस तथ्य पर कि आइटम एक वास्तविक निर्देशिका है या एक निर्देशिका के लिए एक सहानुभूति है।
enzotib

बेशक पूरा होना लाइन के पहले शब्द पर निर्भर करता है। यही कारण है कि मैं कभी-कभी एक काल्पनिक कमांड का उपयोग पूरा करने के लिए करता हूं, और इसे भेजने से पहले केवल इसे वास्तविक कमांड में बदल देता हूं। और मैं .inputrcइस प्रणाली पर अब और नहीं है। (वे दिन थे, बैकस्पेस और कर्सर कुंजियों को ठीक करना ...) और यह सभी तत्वों, निर्देशिका या फ़ाइल, सिमलिंक या नहीं के लिए होता है।
एमपीआई

1
बहुत बढ़िया सवाल, मैंने बिल्कुल वही व्यवहार देखा है, और यह मुझे गुस्सा दिलाता है। हालांकि, कारण के बारे में कोई विचार नहीं है।
क्रिस्टोफ

जवाबों:


22

यह एक ज्ञात बग है। देखें इस एल.पी. सवाल और इन कीड़ों 1 2

यह टिप्पणी ठीक लगती है। आप एक ठीक के लिए इंतजार नहीं कर सकता तो सामान्य चैनलों, संपादित नीचे धीरे-धीरे करने के लिए /etc/bash_completionलाइन 1587, परिवर्तन defaultकरने के लिए filenames(एक बैकअप पहले कर लें)।


3
सारांश: यह एक बग है, तो आप इसे स्थानीय स्तर पर तय जब तक पैच का संपादन करके आता है सकते हैं /etc/bash_completionलाइन 1587, परिवर्तन defaultकरने के लिए filenames
एमपीआई

मेरे awer का संपादन किया
क्रिस्टोफ़

9

मेरे पास था, और हल किया, उबंटू 12.04 पर एडोब रीडर स्थापित करने के बाद एक ही समस्या।

मैंने _filedirब्लॉक में टिप्पणी की /etc/bash_completion.d/acroread.shऔर यह फिर से सामान्य रूप से काम किया।


आज की तारीख में मेरे लिए भी यही काम किया गया है।
जॉन Moeller

1
यहाँ भी: acroread ने इसे ट्रिगर किया और _filedirब्लॉक (शीर्ष पर दाईं ओर) टिप्पणी करते हुए इसे ठीक किया। आपको प्रभाव देखने के लिए अपने सभी गोले में लॉग आउट या रनिंग करना होगा, इस प्रश्न को देखें ।
दिरकजोत

2

मुझे भी यही समस्या थी और मैंने /etc/bash_completion.d/ निर्देशिका को हटाकर इसे ठीक किया, फिर bash_completion को पुनर्स्थापित किया। मुझे लगता है कि एक पुरानी फ़ाइल इस निर्देशिका में थी ... उम्मीद है कि यह आपकी समस्या को भी हल करेगी।


इस आदमी की तरह: timlabath.com/words/2011/05/10/…
टाइप करें

2
यह - वास्तव में - इसे तय किया। हालाँकि, यह विधि बहुत अधिक कट्टरपंथी है, क्योंकि यह कई पूर्णताओं को दूर फेंकता है। पैकेज को हटाने के बाद bash-completion, बची हुई फ़ाइलों में से एक /etc/bash_completion.d/को अपराधी होना चाहिए। यह acroread.shमेरे मामले में था - यह फिर से परिभाषित करता है _filedir
MPi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.