यदि बुद्धिमान समापन विफल रहता है, तो फोर्स बैश सामान्य टैब पूरा करें


10

चूंकि टैब पूरा करना गोले में एक मानक विशेषता बन गया है, इसलिए मैं इसका बहुत खुश उपयोगकर्ता रहा हूं। जब तक मैं सही ढंग से अनुमान लगाता हूं, तब तक मुझे बैश के बुद्धिमान समापन (जहां यह केवल पीडीएफ फाइलों की खोज करता है, जैसे कि मैं फू <टीएबी> टाइप करता हूं) पसंद करता हूं।

यह एक अन्यथा खुशहाल दिन को बर्बाद कर देता है जब बैश पूरा करने से इनकार करने के लिए अपने बुद्धिमान समापन का उपयोग करता है।

आज मैं चाहता था:

tar xvf centos5.8_x86_1.ova

इसलिए मैंने प्रवेश किया:

tar xvf cent<TAB>

और बैश ने पथ को पूरा करने से इनकार कर दिया क्योंकि .ova-files वह नहीं है जो आप आमतौर पर टार के साथ उपयोग करते हैं।

मुझे पता है कि मैं बुद्धिमान पूरा करने के लिए बैश-समापन पैकेज की स्थापना रद्द कर सकता हूं। लेकिन क्या मैं अपना केक बना सकता हूं और खा सकता हूं?

क्या मैं पहले बुद्धिमान समापन का उपयोग करने के लिए बैश पूछ सकता हूं, और यदि वह विफल रहता है, तो गैर-बुद्धिमान पूर्णता का उपयोग करें?


1
<स्पैम> Zsh कर सकते हैं। </ स्पैम>
गिल्स एसओ- बुराई को रोकना '

जवाबों:


9

निम्नलिखित सभी कार्यक्रमों, टार, विम और एमएसीएस के लिए असफल होने के बाद सामान्य बैश पूरा होने पर चालू होना चाहिए:

compopt -o bashdefault tar vim emacs

ऑनलाइन बैश मैनुअल में संबंधित पेज भी देखें ।

कैविएट: आपको हाथ में कमांड के लिए बुद्धिमान पूर्णता द्वारा परिभाषित पूर्णता (कमांड / फाइलनाम / उपयोगकर्ता नाम इत्यादि) के प्रकार के लिए सामान्य व्यवहार मिलता है, उदाहरण के लिए, पूरा होने के बाद serviceभी आप फाइलनाम को पूरा नहीं करेंगे complete -o bashdefault service

इस और अन्य मामलों में जहां बुद्धिमान स्वतः पूर्णता विफल हो जाती है, आप हमेशा फिलेंम्स को लगभग उसी तरह से पूरा करने के लिए दबा सकते हैं Alt-/(या M-/बैश मैनुअल के अंकन में) , जिस तरह से TAB काम करता है अगर बुद्धिमान पूर्णता अक्षम है (लगभग उसी तरह जो अर्थ में नहीं है जैसे पूर्ण पैटर्न )। अन्य प्रकार की पूर्णताओं जैसे कमांड और उपयोगकर्ता नाम के लिए महत्वपूर्ण अनुक्रमों के लिए यहां देखें ।M-/*.txt


2
Alt- / उल्लेख के लिए धन्यवाद, मुझे पता नहीं था कि वहाँ था
माइकल स्पायर

1

बैश पूर्ति, बैश के मानक को पूरा करने का एक विस्तार है और अपने आप में एक बैश प्रोग्राम है। इसलिए यदि आप बदलना चाहते हैं कि प्रोग्राम कैसे कार्य करता है, तो इसे बदल दें। यह मुफ्त सॉफ्टवेयर है, आप इसे करने के लिए स्वतंत्र हैं। tarकमांड के विशिष्ट मामले के लिए , फ़ाइल है /usr/share/bash-completion/completions/tartarविस्तार के साथ एक फ़ाइल को स्वत: पूर्ण करने के लिए ova, बस इसे लाइन में जोड़ें

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

तो यह कहता है

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

ध्यान दें कि यह मार्ग और डेबियन व्हीज़ी (वर्तमान स्थिर संस्करण) के लिए मौजूद कोड है। एक अलग distro या संस्करण का एक अलग कोड हो सकता है लेकिन विचार एक ही है। कोड खोलें और इसे आप जो करना चाहते हैं उसे करने के लिए समायोजित करें।

संपादित करें: मैंने अभी देखा कि यह सवाल हर बार था कि यह एक मैच नहीं है और न केवल जोड़ने ovaका विशिष्ट मामला है tar। शायद यह अभी भी किसी के लिए उपयोगी हो सकता है, यह जानने के लिए कि वे स्रोत के लिए कहां देख सकते हैं।


4
पैकेज प्रबंधक के स्वामित्व में / usr में फ़ाइलों को संशोधित करना उन्नयन पर एक बुरा झटका प्रेरित करने का एक अच्छा तरीका है। बेहतर: पैक किए गए कॉन्फ़िगरेशन को ओवरराइड करें।
क्रिस डाउन

1
@ क्रिस और आप ऐसा कैसे करेंगे? मैं अभी भी साफ .bashrc समाधान के लिए देख रहा हूँ।
क्लेटन स्टेनली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.