जब मैं एक शेल प्रॉम्प्ट पर दबाता हूं तो उसी उपसर्ग के साथ पिछले कमांड को खोजें


19

FreeBSD की दुनिया से आते हुए, मैं Linux टर्मिनल को FreeBSD एक जैसा व्यवहार करना चाहता हूं, विशेष रूप से 9.1 संस्करण, मूल रूप से जब आप cdटर्मिनल में टाइप करते हैं और "ऊपर" तीर को धक्का देते हैं, तो आप इतिहास के सभी आदेशों को ब्राउज़ कर सकते हैं cdजिसके साथ आप शुरू करते हैं बहुत समय हासिल करें।

मैं नहीं जानता कि लिनक्स डेबियन या सेंटोस में इस सुविधा को कैसे सक्षम किया जाए जो मुझे पूरे टाइप करने के लिए मजबूर करता है, क्या कोई मदद कर सकता है।


7
यह शेल का कार्य है, टर्मिनल का नहीं। FreeBSD में आप किस शेल का उपयोग कर रहे हैं? आप लिनक्स के लिए समान (या समान) शेल प्राप्त करने में सक्षम हो सकते हैं।
cjm

मैं tcsh शेल का उपयोग कर रहा हूं।
अब्देलिलाह बेनौ

2
मैं ओएस एक्स के तहत tcsh का उपयोग कर रहा हूं और यह आसान दिखने वाला व्यवहार नहीं है ... कुछ खोज के बाद, मैंने पाया कि मैं इसे यहां वर्णित के रूपbindkey -k (up|down) history-search-(back|for)ward में डालकर सक्षम कर सकता हूं । ठंडा! .tcshrc
गैरेट अलब्राइट

जवाबों:


34

निम्नलिखित में जोड़ें ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

व्याख्या

~/.inputrcGNU रीडलाइन के लिए कॉन्फ़िगरेशन फ़ाइल है । कई गोले, सहित bashऔर tcshकमांड लाइन संपादन के लिए रीडलाइन का उपयोग करें। जब ऊपर-तीर कुंजी ( \e[A) और डाउन-एरो कुंजी ( \e[B) के लिए एस्केप सीक्वेंस मिलते हैं, तो ऊपर की दो पंक्तियाँ इसकी इतिहास खोज कार्यक्षमता को लागू करने के लिए रीडलाइन बताएंगी ।


मुझे वर्तमान कमांड के अंत में अंतिम पंक्ति का अंतिम शब्द डालने के लिए F12 जोड़ना पसंद है । Last wordअक्सर एक रास्ता है जो मैं चाहता हूँ कि विभिन्न रहस्यमय क्लिच में बाहर की कोशिश करो। और मुझे शुरू से पूरी अंतिम पंक्ति को संपादित करने के लिए F12 पर शिफ्ट करें~/.inputrcएक आसान उपकरण है।
जलानब j

शिफ्ट F12 एक आवश्यकता है vi मोड
jalanb

6

क्या हो रहा है कि फ्रीबीएसडी और लिनक्स डिफ़ॉल्ट रूप से विभिन्न गोले का उपयोग करते हैं। FreeBSD tcsh को डिफॉल्ट करता है , जिसमें पहले की तुलना में बैश की तुलना में बेहतर इंटरएक्टिव फीचर्स थे (लेकिन बैश ने पकड़ लिया है) लेकिन मार्किंग से बदतर स्क्रिप्टिंग फीचर्स

आपके द्वारा उपयोग किए जाने वाले वातावरण को प्राप्त करने का सबसे सरल तरीका यह होगा कि आप अपने शेल को लिनक्स पर tcsh पर स्विच करें। बशर्ते कि tcsh सिस्टम-वाइड स्थापित है (यदि यह नहीं है, तो अपने सिस्टम एडमिनिस्ट्रेटर को इसे इंस्टॉल करने के लिए कहें), chsh -s tcshअपने डिफ़ॉल्ट शेल को बदलने के लिए चलाएँ ।

वैकल्पिक रूप से, आप यह कमांड सेट कर सकते हैं कि इस कमांड का उपयोग आप कर रहे हैं। डिफ़ॉल्ट रूप से, Upऔर Downतीर इतिहास में सभी आदेशों के बीच नेविगेट करते हैं, न कि केवल उन उपसर्गों के साथ जो आपके द्वारा टाइप किए गए उपसर्ग से शुरू होते हैं। आपके द्वारा उपयोग किए जा रहे व्यवहार के लिए इसे बदलने के लिए, बैश की इनिशियलाइज़ेशन फ़ाइल में निम्न पंक्तियाँ डालें, जो .bashrcआपके होम डायरेक्टरी में है। . ~/.bashrcआरंभिक फ़ाइल को फिर से पढ़ने के लिए या तो एक नया शेल चलाएं या शुरू करें।

bind '"\eOA": history-search-backward'
bind '"\e[A": history-search-backward'
bind '"\eOB": history-search-forward'
bind '"\e[B": history-search-forward'

जब आप एक तीर कुंजी दबाते हैं, तो आपका अनुक्रम शेल को भेजता है। Upहो सकता है \eOA(भागने, O, A) या \e[Aअपने टर्मिनल पर निर्भर करता है, और इसी के लिए Down

डिफ़ॉल्ट रूप से, bash कमांड हिस्ट्री को खोजने के लिए अलग-अलग कुंजी बाइंडिंग प्रदान करता है। आप Ctrl+ को दबा सकते हैं R, फिर लाइन में कहीं भी इस सबस्ट्रिंग वाले कमांड को खोजने के लिए कुछ वर्ण दर्ज कर सकते हैं । पिछड़ों के बजाय आगे बढ़ने के लिए Ctrl+ दबाएँ S। खोज वृद्धिशील है (अर्थात जैसा-आप-प्रकार); Alt+ Pऔर Alt+ Nआपको एक गैर-वृद्धिशील खोज देते हैं।

बैश और टीसीएच के बजाय, आप ज़श पर स्विच कर सकते हैं, जिसमें कुछ साफ विशेषताएं हैं जो अन्य गोले में नहीं पाई जाती हैं । Zash में bash की तरह डिफ़ॉल्ट रूप से Ctrl+ Rऔर Ctrl+ Sहै। Tcsh में प्राप्त करने Upऔर Downपसंद करने के लिए , निम्नलिखित पंक्तियाँ इस प्रकार रखें ~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

यदि आप हर जगह समान शेल का उपयोग करना चाहते हैं, तो आप FreeBSD पर भी bash या zsh का उपयोग कर सकते हैं, बशर्ते कि पोर्ट स्थापित हो (फिर से, अपने सिस्टम एडमिनिस्ट्रेटर से पूछें)।


1

tcshअधिकांश लिनक्स वितरण के लिए उपलब्ध है। tcshपैकेज को स्थापित करने का प्रयास करें , फिर chsh -s /bin/tcshइसे अपना डिफ़ॉल्ट शेल बनाने के लिए दौड़ें।


1
या आप बैश पर स्विच करने पर विचार कर सकते हैं (मैंने किया था)।
कीथ थॉम्पसन

1

अन्य उत्तर इससे निपटते हैं, लेकिन यदि आप अधिक चाहते हैं, तो https://github.com/zsh-users/zsh-history-substring-search पर एक नज़र डालें

प्रेज़्टो ( https://github.com/sorin-ionescu/prezto ) भी zsh goodies से भरा है।


आपके उत्तर के लिए धन्यवाद, वैसे मैं अभी भी नहीं देखता कि बैश या टीसीश पर क्या लाभ हैं?
अब्देलिलाह बेनौ

1
हुम, आप इन सभी गोले में हर मूल सामान को बहुत अधिक कर सकते हैं। मैं बहुत अच्छी तरह से बनाए रखा prezto बंडल (शायद बड़े खेल परिवर्तक), सही संकेत (जो विशेष सुविधा है) के कारण zsh का उपयोग करता हूं और क्योंकि यह बैश (कंसीगेशन और सामान) की तुलना में अधिक पॉलिश लगता है।
फवाद सऊद
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.