Vim कमांड के साथ बैश स्वतः पूर्ण


13

बैश में, रास्तों के स्वत: पूर्णीकरण ने हाल ही में vimकमांड जारी करते समय काम करना बंद कर दिया है जहां पथ दो निर्देशिकाओं की तुलना में गहरा है (यह अन्य आदेशों, जैसे कि lsऔर cd) के साथ अपेक्षा के अनुसार काम करना जारी रखता है ।

उदाहरण के लिए, यदि मैं टाइप करता हूं ls .config/btsync/btऔर फिर TAB दबाता हूं, तो यह फैलता है ls .config/btsync/btsync.conf

यदि मैं टाइप करता हूं vim .config/btऔर फिर TAB दबाता हूं , तो यह फैलता है vim .config/btsync/

हालांकि, अगर मैं टाइप करता हूं vim .config/btsync/btऔर फिर TAB दबाता हूं, तो कुछ नहीं होता है (मुझे उम्मीद है कि इसका विस्तार होगा vim .config/btsync/btsync.conf, lsउदाहरण के लिए, ऊपर।

मुझे अपने उपयोगकर्ता के रूप में और सु के रूप में चलने पर एक ही मुद्दा मिलता है।

मैंने इस पोस्ट को पढ़ा जिसमें बैश-पूरा होने के पुराने संस्करणों के साथ एक समस्या का उल्लेख किया गया था लेकिन मैं 2.1-5 चला रहा हूं।

अद्यतन: कुछ अतिरिक्त परीक्षण के बाद, मैंने पाया है कि मूल मुद्दा यह है कि बैश केवल निर्देशिका नामों को पूरा करेगा , न कि फ़ाइलनामों के लिए।

अद्यतन: यह पता चला है कि bash-completionसमग्र कारण था। स्वीकृत उत्तर पर मेरी दूसरी टिप्पणी देखें।

इस व्यवहार के संभावित कारण के रूप में कोई भी सुझाव कृतज्ञता प्राप्त होगा!



.bashrcमांग के अनुसार मेरे पोस्ट से लिंक करें ।
TheRogueWolf

.Bashrc, .aliases और .functions के लिंक हटा दिए गए हैं, क्योंकि अब इस समस्या का पता नहीं चल पाया है।
TheRogueWolf

डेबियन 9 पर कुछ ही मुद्दे, कुछ स्थापनाएं, लेकिन सभी नहीं: $
फिलिप गाचौड

जवाबों:


10

मैंने आपके लिए कुछ और शोध किया और यहाँ मैंने पाया - स्वतः पूर्णता की कुंजी bashकमांड है complete। आप उपयोग करने के लिए नियम प्रिंट कर सकते हैं vim:

complete -p vim

इसी तरह आप इन विशिष्ट नियमों को हटा सकते हैं:

complete -r vim

यह कमांड इसे डिफ़ॉल्ट पर रीसेट करता है - सामान्य पथ और फ़ाइल नाम बिना किसी अतिरिक्त तर्क के पूरा होने वाला। शायद यही आप चाहते हैं।

अधिक जानकारी के लिए चेक आउट करें help completeया कमांड के man bashबारे में अनुभाग देखें complete(यह एक बैश बिल्ट-इन है, इसलिए इसे बैशपेज में प्रलेखित किया गया है)।

एक अंतिम बिंदु - उपरोक्त परिवर्तन केवल वर्तमान bashसत्र को प्रभावित करते हैं , यदि आप complete -r vimअपने लॉगिन को डालने के बाद vim नियमों को हटाना चाहते हैं ~/.bashrc

उम्मीद है की वो मदद करदे :)


यही किया। बहुत बहुत शुक्रिया। complete -p vimआदेश लौटे complete -F _filedir_xspec vimजिसके द्वारा हटा दिया गया था complete -r vimआदेश, इस मामले को सुलझाने। मैं completeकमांड पर कुछ रीडिंग करने जा रहा हूं और -p स्विच द्वारा दी गई जानकारी। थोड़ा हैरान हो गया कि यह व्यवहार क्यों बदल गया है, इसलिए इसकी भी जांच करेंगे।
TheRogueWolf

3
ऐसा लगता है कि जैसे बैश-समापन आखिर अपराधी था। _filedir_xspecमें समारोह /usr/share/bash-completion/bash_completionकेवल निर्देशिका पूरा करती है। मैंने अनइंस्टॉल कर bash-completionदिया है, complete -r vimलाइन को मेरे से हटा दिया है .bashrcऔर रिबूट किया है और vimअब अपेक्षा के अनुरूप व्यवहार करता है।
TheRogueWolf

3

डिफॉल्ट से बैश करें ऑटोकंप्लीट्स केवल पथ और फ़ाइल नाम। हालाँकि तंत्र एक्सटेंसिबल है और बैश को अलग-अलग प्रोग्राम के लिए अलग-अलग ऑटोकम्प्लीशन करने के लिए सिखाया जा सकता है। उदाहरण के लिए, gitयह उप-कमांड के नाम (क्लोन, कमिट) को स्वत: पूर्ण कर सकता है और केवल पथनाम के बजाय संशोधन कर सकता है। कभी-कभी यह आसान होता है, कभी-कभी काफी कष्टप्रद - उदाहरण के लिए जब gzip -dस्वत: पूर्ण फ़ाइल नाम से इनकार कर दिया जाता है जिसमें .gzविस्तार नहीं होता है ।

बैश समापन आमतौर पर कॉन्फ़िगर किया गया है /etc/bash_completion.d- आपको संभवतः vimवहां एक फ़ाइल मिल जाएगी । यह वह फ़ाइल है जिसमें vimकमांडलाइन के लिए स्वतः पूर्ण नियम हैं ।

अब आपको दो विकल्प मिले हैं:

  1. या तो फ़ाइल को स्वतः पूर्ण पथ पर ठीक करें क्योंकि उपयोगकर्ता वैसे भी उम्मीद करते हैं।
  2. विशेष vimनियमों को अक्षम करने के लिए फ़ाइल को निकालें और केवल डिफ़ॉल्ट पथ स्वतः पूर्णता निष्पादित करें।

और निश्चित रूप से एक बग रिपोर्ट दर्ज करें जो समस्या को रेखांकित करती है ताकि यह भविष्य के संस्करणों में ठीक हो जाए :)


महान स्पष्टीकरण के लिए बहुत धन्यवाद :) मैं एक नज़र में था /etc/bash_completion.dऔर केवल एक hgफ़ाइल मौजूद है (मर्क्यूरियल के लिए)। बहुत अजीब।
TheRogueWolf

1
तो यह कहीं और होना चाहिए। पैकेज से या पैकेज /usr/share/bash-completion/से सभी फ़ाइलों को आज़माएं या सूचीबद्ध करें (यह सुनिश्चित नहीं करें कि इसे ArchLinux पर कैसे कहा जाता है)। यह कहीं हो जाएगा। vimbashbash-completion
MLU

1
bash-completionपैकेज शो से फाइलों को सूचीबद्ध /usr/share/bash-completion/completionsकरना कई कार्यक्रमों के लिए नियम हैं, लेकिन नहीं vimvimपैकेज के साथ स्थापित फाइलों को सूचीबद्ध करना किसी भी पूर्ण-संबंधित फाइलों को नहीं दिखाता है और संपूर्ण सिस्टम को खोजकर find / -name vimभी पूर्ण-संबंधित फाइलों को नहीं दिखाता है।
TheRogueWolf

2

शायद आप बैश-पूर्ति को पुनः स्थापित कर सकते हैं: apt-get install --reinstall bash-completion

और फ़ाइल /etc/bash.bashrc पर एक नज़र डालें: nano /etc/bash.bashrc

और सत्यापित करें कि निम्न पंक्ति अच्छी तरह से अनियोजित है:

if ! shopt -oq posix; then
if [ -f /usr/share/bash-completion/bash_completion ]; then
. /usr/share/bash-completion/bash_completion
elif [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
fi

फिर, अपना टर्मिनल सत्र पुनः आरंभ करें


मैंने व्यवहार को हटाने bash-completion, परीक्षण करने vimऔर फिर पुनः स्थापित करने bash-completionऔर परीक्षण करने की कोशिश की , लेकिन मैंने अभी भी दोनों परिस्थितियों में एक ही समस्या का अनुभव किया है। आपके द्वारा सूचीबद्ध लाइनें मौजूद नहीं हैं /etc/bash.bashrc। हालाँकि यह रेखा है[ -r /usr/share/bash-completion/bash_completion ] && . /usr/share/bash-completion/bash_completion
TheRogueWolf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.