BASH में रिवर्स-आई-सर्च के माध्यम से कैसे साइकिल चलाएं?


443

टर्मिनल में, मैं CTRL-Rपहले BASH में टाइप किए गए एक मेल कमांड की खोज करने के लिए टाइप कर सकता हूं । उदाहरण के लिए, यदि मैं टाइप करता हूं CTRL-Rतो grepमेरी अंतिम grepकमांड सूचीबद्ध है , और मैं इसका उपयोग करने के लिए एंट्री मार सकता हूं। यह केवल एक सुझाव देता है। क्या पहले से टाइप किए गए अन्य कमांड के माध्यम से साइकिल चलाने का कोई तरीका है?

जवाबों:


596

यदि मैं इस प्रश्न को सही ढंग से समझता हूं तो आपको बार-बार मार कर विकल्पों के माध्यम से चक्र करने में सक्षम होना चाहिए Ctrl+R

उदाहरण के लिए:

Ctrl+R grep Ctrl+R Ctrl+R ...

जो आपके इतिहास के माध्यम से खोज करता है। इसके बजाय आगे की खोज करने के लिए, का उपयोग करें Ctrl+S, लेकिन आपको सेट करने की आवश्यकता हो सकती है: stty -ixon(या तो .bash_profileया मैन्युअल रूप से) इससे पहले कि XON / XOFF सुविधा को अक्षम करें जो इसे लेता है Ctrl+s। (अधिक जानकारी यहाँ ।)


23
+1 - FYI करें - आप इस StackOverflow उत्तर के अनुसार आगे भी खोज सकते हैं ।
जॉर्डन आर्सेनो

7
और यदि आप पास होने के लिए रिवर्स स्क्रॉलिंग के लिए Ctrl + Shift + r का उपयोग करते हैं।
बुद्धिमानी

19
@wiswit CTRL+SHIFT+rमेरे लिए काम नहीं करता है।
मैक्सिम सुसलोव

9
@MaximSuslov इस सवाल को देखें: stackoverflow.com/questions/791765/… आप [[ $- == *i* ]] && stty -ixonअपने .bashrc में जोड़ सकते हैं और फिर CTRL+sइसके उलट काम करेंगेCTRL+r
gla3dr

9
@JordanArseno मैंने "सर्च फॉरवर्ड" लिया जिसका अर्थ है "उन कमांडों की खोज, जिन्हें मैंने अभी तक टाइप नहीं किया है"
जोश जॉनसन

234

यदि आपको लगता है कि कमांड का उपयोग अक्सर किया जाएगा, तो आप एक टैग जोड़ सकते हैं

कमांड #useful

फिर

ctrl+r #useful

यह काम करता है क्योंकि #एक टिप्पणी परिसीमन है, यानी प्रतीक के बाद आने वाली हर चीज की व्याख्या कमांड के रूप में नहीं की जाती है। हालांकि, यह इतिहास में दर्ज किया जाएगा और इस प्रकार खोज योग्य है।


5
आमतौर पर मुझे इस तरह की टैगिंग पसंद है। #trg_bld #open_log
मकेश जूल

1
इस टैग को कहाँ जोड़ा जाए?
सुदीप भंडारी

5
@ सुदीप भंडारी आपकी आज्ञा के बाद। # एक टिप्पणी शुरू करता है। जैसे ls -lah #useful
आंद्रेई

47

आप इन पंक्तियों को ~ / .inputrc में जोड़कर थोड़ी अलग खोज करने के लिए ऊपर और नीचे तीर भी सेट कर सकते हैं:

"\e[A": history-search-backward
"\e[B": history-search-forward

कमांड में कहीं भी एक विकल्प की खोज करने के बजाय (जैसे Ctrl-r ) यह कर्सर के बाईं ओर पाठ के साथ शुरू होने वाली कमांड की खोज करेगा । उदाहरण के लिए, अगर मैं ये कमांड चलाता हूं:

$ ls bart
$ ls fools

फिर टाइप करें lsऔर Upदो बार दबाएं , यह ls bartएक ही जगह पर कर्सर दिखाएगा । इसके साथ तुलना करें Ctrl- rजहां यह lsअंतिम पंक्ति में दो बार मिलेगा , इसलिए आपको पिछली पंक्ति को खोजने के लिए इसे एक बार फिर से दबाना होगा।

इन दोनों दृष्टिकोणों में अपनी ताकत है, और ये दोनों बहुत समय बचा सकते हैं।


2
यह ओएस एक्स पर भी मानक है, इसलिए आपको ~/.inputrcउन दो लाइनों को बनाने और जोड़ने की आवश्यकता नहीं है ।
DASKAjA

1
जैसा कि फाल्कोनीपी ने इस उत्तर की टिप्पणियों में लिखा है , उबंटू पर आपको ~/.inputrcइतिहास-खोज- * सहित दो पंक्तियों में असहजता की जरूरत है- *
अरपाड़ होरवाथ

आप इस पोस्ट के बारे में अधिक जानकारी के लिए इस उत्तर को भी देख सकते हैं: codeinthehole.com/writing/…
आंद्रेई

यह मेरे macOS (10.13) पर मानक नहीं था। मैंने हमेशा इस कार्यक्षमता को याद किया है!
इमरिन

इसके बारे में एक अच्छी बात यह है कि आप इतिहास के माध्यम से नियमित स्किमिंग के लिए अभी भी ctrl-p / ctrl-n का उपयोग कर सकते हैं
elig

0

वहाँ में निर्मित के लिए एक स्थानापन्न है Ctrl + Rकहा जाता hstr । यह एक ही समय (अन्य चीजों के बीच) में सभी खोज टोकन से मेल खाने वाले कमांड इतिहास को खोजने के लिए अनुमति देता है, और तीर कुंजियों का उपयोग करके परिणाम के माध्यम से चक्र:

उदाहरण

यहाँ एक डेमो स्क्रैंकास्ट है

इसे डेबियन-परिवार के OS पर स्थापित किया जा सकता है जैसे:

add-apt-repository ppa:ultradvorka/ppa
apt-get update
apt-get install hstr

hstr --show-configuration >> ~/.bashrc

और फिर Ctrl + R(टर्मिनल को फिर से खोलने के बाद) का उपयोग करें।

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