क्या bash में कमांड का हिस्सा टाइप करने के बाद ctrl-r का उपयोग करने का एक तरीका है?


13

बाश में Ctrl+ rकमांड बहुत उपयोगी है, मैं टाइप करता हूं Ctrl+ r whateverऔर यह शब्द युक्त कमांड के लिए मेरा इतिहास खोजता है whatever। लेकिन अगर मैं टाइप करता हूं whateverऔर महसूस करता हूं कि मैं उस शब्द को खोजूंगा और हिट Ctrl+ rकुछ भी नहीं होगा।

वहाँ एक तरह से एक कुंजी मार रहा है और यह व्यवहार कर रहा है जैसे कि मैंने टाइप किया था Ctrl+ के r whateverबजाय whatever Ctrl+ r?

मेरे पास निम्नलिखित हैं .inputrc:

"\C-p": history-search-backward

लेकिन यह केवल तभी काम करता है जब लाइन की शुरुआत समान हो।

जवाबों:


12

आप पहले से ही आसानी से टाइप कर चुके बश का इतिहास खोज सकते हैं।

मान लीजिए आप सिर्फ टाइप किया है curl -I http://superuser.comऔर आप टाइप करने के लिए भूल गया Ctrl+ rपहले:

$ curl -I http://superuser.com

आप अपने इतिहास पर एक i-खोज करना चाहते हैं, तो पंक्ति के आरम्भ में जाना पहले ( Ctrl+ a,) आई-खोज (प्रवेश Ctrl+ r) और प्रकार Ctrl+ y। यह आपके द्वारा पहले से लिखे गए पूरे पाठ की सामग्री का उपयोग करके खोज करना चाहिए:

(reverse-i-search)`curl -I http://superuser.com': curl -I http://superuser.com/faq

वैकल्पिक रूप से, आप उपयोग कर सकते हैं Ctrl+ wके बजाय Ctrl+ yपाठ टाइप करते का सिर्फ पहला शब्द का उपयोग करते हुए खोज करने के लिए:

(reverse-i-search)`curl': curl -I http://superuser.com/faq

यह सब एक ही कुंजी से बांध रहा है

यदि आप एक कीस्ट्रोके में यह सब करना चाहते हैं, तो आप एक एकल कुंजी को कीबोर्ड मैक्रो से बांध सकते हैं। यदि आप का उपयोग करना चाहते हैं, कहते हैं, F12भागो:

$ bind '"\e[24~":"\C-a\C-r\C-y"'

जो सत्र के लिए चलेगा।

इसे स्थायी बनाना

बस अपने में मैक्रो को परिभाषित करें ~/.inputrc:

"\e[24~":"\C-a\C-r\C-y"

ध्यान दें कि यहाँ हम सिंगल कोट्स को छोड़ देते हैं

आपको यह उत्तर उपयोगी लग सकता है।


1
मुझे यकीन है कि अगर यह मेरी विन्यास के साथ एक समस्या है नहीं हूँ, लेकिन बाद मैं टाइप c-rटाइपिंग c-yक्या पेस्ट नहीं है। अगर मैं टाइप c-yअपने आप में केवल पाठ चिपकाता है, तो मैं दो आदेशों गठबंधन नहीं कर सकते हैं ...
skeept

क्या आप पहले लाइन की शुरुआत करने जाते हैं? (सीए)
२३:१५ बजे hso

1
आप सही हैं, मैं लाइन की शुरुआत नहीं कर रहा था। अब मैं अपने .inputrc में है "\C-xr": "\C-a\C-r\C-y"और यह बहुत अच्छा काम करता है! इस उत्तर के लिए धन्यवाद।
स्केप्ट करें

मुझे लगता है कि यह तीसरी बार है जब मैंने इस control+a control+r control+yबात को गुमराह किया है! धन्यवाद यह उत्तर हमेशा यहाँ है! :)
डॉ। बीईओ

2

चार स्ट्राइक सहेजें:

Ctrl-Rअपने .bashrc(या .inputrcयदि आप चाहें तो) को जोड़कर एक दूसरे से बचें :

bind '"\er":"\C-a\C-r\C-y\C-r"' # alt-r = ctr-a ctr-r ctr-y ctr-r

यह ALT-R को CTR-A CTR-R CTR-Y CTR-R पर मैप करेगा

विवरण:

  • ALT-R : बाइंडिंग कुंजी। एक और अच्छा विकल्प है \C-xr( CTR-X CTR-R )
  • सीटीआर-ए : लाइन की शुरुआत में जाएं (जो लिखा है उसे याद करते हुए)
  • CTR-R : रिवर्स खोज शुरू करें
  • CTR-Y : खोज के एक भाग के रूप में CTR-A को क्या याद रखें
  • सीटीआर-आर : अब तक के पात्रों के साथ रिवर्स खोज को ट्रिगर करता है

यह अभी भी मेरे लिए स्पष्ट नहीं है कि Cy खोज क्षेत्र पर कमांड को क्यों चिपकाता है (Ca को "कॉपी" नहीं माना जाता है, क्या यह है?) और क्यों Cw केवल पहला शब्द पेस्ट करता है।
मार्कस

हां, C-aन केवल चलता है, बल्कि सामग्री को स्थानांतरित करने के लिए याद (कॉपी) करता है।
डॉ। बीको

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