बैश: 4 बार भागने का दबाव


11

जब मैं बैश टर्मिनल में 4 बार प्रेस करता हूं, तो यह कुछ इस तरह प्रदर्शित होता है:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

यह विशेषता क्या है, और ये प्रविष्टियाँ कैसे पाई जाती हैं? (दूसरे esc प्रेस पर, टर्मिनल एक श्रव्य चेतावनी देता है।)

जवाबों:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

यह दिखाता है कि Emacs कमांड लाइन संपादन मोड में Meta+Esc(और Ctrl+i) डिफ़ॉल्ट कुंजी बाइंडिंग रीडलाइन फ़ंक्शन है completeMetaकुंजी आमतौर पर है Escएक स्पष्ट बिना कीबोर्ड पर Metaकुंजी। इस फ़ंक्शन के लिए Readline प्रलेखन कहता है

बिंदु से पहले पाठ पर पूरा करने का प्रयास करें। वास्तविक पूर्ण प्रदर्शन अनुप्रयोग-विशिष्ट है। उदाहरण के लिए, बैश, पाठ को एक चर (यदि पाठ के साथ शुरू होता है $), उपयोगकर्ता नाम (यदि पाठ के साथ शुरू होता है ~), होस्टनाम (यदि पाठ शुरू होता है @), या कमांड (उपनाम और फ़ंक्शन सहित) के रूप में पूरा करने का प्रयास करता है। यदि इनमें से कोई भी मैच नहीं बनाता है, तो फ़ाइल नाम पूरा करने का प्रयास किया जाता है। दूसरी ओर, Gdb, प्रोग्राम फ़ंक्शंस और वेरिएबल्स को पूरा करने की अनुमति देता है, और केवल कुछ परिस्थितियों में फ़ाइल नाम पूरा करने का प्रयास करता है।


एंथन के जवाब के बारे में आपकी टिप्पणी के बारे में : नहीं, Escदो बार दबाने का अर्थ Tabआम तौर पर दबाने के समान नहीं है (जब तक कि यह एक प्रोग्राम में नहीं है जो उन दोनों को एक ही कार्रवाई में मैप करता है, जैसा कि रीडलाइन डिफ़ॉल्ट रूप से होता है)। हालांकि Ctrl+i है के रूप में ही Tabहै, जैसे Ctrl+[रूप में ही है Esc। इसका मतलब है कि आप के साथ पूरा करने के लिए कर सकते हैं Ctrl+[ Ctrl+[में bashजब तक डबल, यदि आप चाहें तो EscReadLine के लिए बाध्य है completeसमारोह। यह आसान है यदि आप VT220 टर्मिनल पर काम कर रहे हैं, उदाहरण के लिए, जिसमें एस्केप कुंजी का अभाव है:

जर्मन VT220 कीबोर्ड


कुसलानंद, इस गहन उत्तर के लिए धन्यवाद। अपने अंतिम बिंदु के बारे में: क्यों Escदो बार (या \M-\e) दबाने के समान नहीं है Tab, अगर दोनों पूरा करते हैं?
flow2k

1
@ flow2k यह वही है यदि Esc-Esc और Tab दोनों completeफ़ंक्शन के लिए बाध्य हैं , जो कि वे डिफ़ॉल्ट रूप से हैं, लेकिन आम तौर पर नहीं (यानी कुंजी-प्रेस "समान" नहीं हैं)। आप हर जगह केवल Esc-Esc के साथ टैब को स्थानापन्न नहीं कर सकते, केवल रीडलाइन-सक्षम कार्यक्रमों में। हालाँकि, आप Ctrl-i या Esc को Ctrl- [कहीं भी के साथ टैब स्थानापन्न कर सकते हैं।
Kusalananda

एक अनुवर्ती अगर मैं कर सकता हूँ: मैं Tabके उत्पादन में नहीं दिख रहा है bind -p। ऐसा क्यों है? हो सकता है क्योंकि Tab"हार्डकोड" है और बाध्य नहीं किया जा सकता है?
flow2k

1
@ flow2k नहीं, टैब Ctrl-i के समान है। के लिए देखो \C-i। यह हार्डवेयर स्तर पर एक समतुल्यता है।
Kusalananda

8

इसे फ़ाइल पूर्णता कहा जाता है, और यदि आपके पास कमांडलाइन पर कोई पूर्ववर्ती कमांड नहीं है, तो bash आपको उन सभी 2837 कमांडों को पूरा करने की पेशकश करेगा जिनके बारे में यह पता है, दोनों बिल्ट-इन और आपके द्वारा पाया गया PATH

क्रमबद्ध क्रम में प्रस्तुत किए गए हैं


1
दिलचस्प - तो यह दो बार टैब दबाने के समान है। शायद 2 बच गए = 1 टैब?
flow2k
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.