क्या रूबी आईआरबी में पिछले कमांड को दोहराने का कोई आसान तरीका है? मैं यूनिक्स में विस्मयादिबोधक चिह्न (!) का उपयोग करने की तरह कुछ करना चाहता हूं।क्या मैं irb में कमांड दोहरा सकता हूं?
धन्यवाद।
क्या रूबी आईआरबी में पिछले कमांड को दोहराने का कोई आसान तरीका है? मैं यूनिक्स में विस्मयादिबोधक चिह्न (!) का उपयोग करने की तरह कुछ करना चाहता हूं।क्या मैं irb में कमांड दोहरा सकता हूं?
धन्यवाद।
def repeat_last_irb
eval(IRB.CurrentContext.io.line(-2))
end
तो आप replat_last_irb
में आप आईआरबी सांत्वना पिछले इनपुट को चलाने के लिए उपयोग कर सकते हैं।
IRB.CurrentContext.io इस नीचे की तरह है:
ruby-1.9.3-p0 :001 > def hello
ruby-1.9.3-p0 :002?> end
=> nil
ruby-1.9.3-p0 :003 > IRB.CurrentContext.io
=> #<IRB::ReadlineInputMethod:0x00000001c7b860 @file_name="(line)", @line_no=3, @line=[nil, "def hello\n", "end\n", "IRB.CurrentContext.io\n"], @eof=false, @stdin=#<IO:fd 0>, @stdout=#<IO:fd 1>, @prompt="ruby-1.9.3-p0 :003 > ">
इस वस्तु को बचाने आईआरबी सब कब की जानकारी है, और एक लाइन विधि के साथ हर पंक्ति आप इनपुट पाने के लिए।
इसलिए, हम अंतिम इनपुट दोहराने के लिए eval का उपयोग कर सकते हैं।
ऊपर तीर आपको रेखा से इतिहास रेखा प्राप्त करता है। प्रिये के पास और अधिक उपहार हैं लेकिन मैंने अभी तक कोशिश नहीं की है।
Ctrl-r इतिहास के माध्यम से आईआरबी और प्राइ दोनों में भी खोज को उलट देगा (मुझे लगता है कि यह एक सामान्य रीडलाइन सुविधा है)। – d11wtq
@ d11wtq - मुझे ctrl-r मिल रहा है 1.8.7 लेकिन 1.9.3 नहीं - क्या हमने इसे खो दिया? या मेरा irb टूटा हुआ है? – seph
मुझे संदेह है कि इसे रीडलाइन के एक अलग संस्करण के खिलाफ संकलित किया गया है। मेरे लिए ठीक काम करता है। – d11wtq
मुझे नहीं लगता कि किसी भी प्रकार का क्रमांकित इतिहास समर्थन (जैसे gdb
) है, लेकिन आप इतिहास के माध्यम से नेविगेट करने के लिए तीर कुंजियों का उपयोग कर सकते हैं, जैसा कि आप खोल में कर सकते हैं।
अद्यतन
बाहर कर देता है मैं पूरी तरह से गलत हूँ, और Hooopo सही है; आप IRB.CurrentContext.io.line
विधि के माध्यम से इतिहास का उपयोग कर सकते हैं, तो
eval IRB.CurrentContext.io.line <line number>
आदेश दोहराया जाएगा। Hooopo भी कहते हैं के रूप में, एक विधि में इस लपेटकर सही ढंग से काम करता है:
def r(number)
eval IRB.CurrentContext.io.line number
end
तो
ruby-1.9.3-p0 :004 > puts "hello"
hello
=> nil
ruby-1.9.3-p0 :005 > r 004 # (or 'r 4')
hello
=> nil
या, मुझे लगता है कि आईआरबी लाइन कमांड में बढ़ती संख्या है, यह सोचकर कि यह आदेश दोहराने के लिए उपयोगी है या नहीं। –
@RobertAHenru ने मेरा जवाब संपादित किया :) – kfb
या .. यह काम करता है! धन्यवाद! –
irb REPL मूल रूप से history expansion का समर्थन नहीं करता है, जो आप ढूंढ रहे हैं। एक ठोस विकल्प के लिए, pry REPL replay कमांड प्रदान करता है।
दोहराने के लिए (या संशोधित) पहले के एक आदेश है कि चरणों इतिहास में वापस बस कुछ की तुलना में अधिक है तेज तरीका, टाइपिंग Ctrl +आर से कुछ-स्ट्रिंग के बाद से इसके लिए खोज करने के लिए है प्रश्न में आदेश।
GNU Readline library द्वारा प्रदान किए गए अधिक कीबोर्ड शॉर्टकट के लिए, here देखें। वे कई गोले और अन्य अनुप्रयोगों द्वारा भी समर्थित हैं।
यह अच्छा होगा, लेकिन Ctrl-R 'irb' में समर्थित नहीं है। – kfb
@r_ यह सच नहीं है। आईआरबी मेरे लिए बस ठीक-ठीक (रूबी 1.9.3) का समर्थन करता है। मुझे लगता है कि यह वास्तव में एक पठार सुविधा है, इसलिए शायद libreadline के अपने संस्करण पर निर्भर करता है। – d11wtq
यह कई सालों से लिब्रेडलाइन में रहा है, इसलिए मैं कहूंगा कि रूबी/आईआरबी को लिब्रेडलाइन समर्थन के साथ संकलित किया गया था या नहीं। जब तक आप रूबी/आईआरबी स्थापित/संकलित करते हैं, तब तक आपके पास libreadline स्थापित होना चाहिए। Libreadline के बिना आप शायद इतिहास को नेविगेट करने के लिए तीर कुंजियों का उपयोग करने में सक्षम नहीं होंगे। –
, Pry आरईपीएल चलो तुम (बस लाइनों के बजाय) पूरे भाव उत्तर play -i
आदेश का उपयोग:
यहाँ देखें:
[31] (pry) main: 0> (1..5).map do |v|
[31] (pry) main: 0* v * 2
[31] (pry) main: 0* end
=> [2, 4, 6, 8, 10]
[32] (pry) main: 0> play -i 31
=> [2, 4, 6, 8, 10]
[33] (pry) main: 0>
आप बस play -i
को पारित उस कोड के लिए अभिव्यक्ति संख्या (संकेत के निकट []
में संख्या) जिसे आप फिर से चलाने के लिए चाहते हैं।
play
आदेश के बारे में अधिक जानकारी के लिए wiki page भी अन्य, आपको पहले देख सकते हैं का उपयोग कर और जोड़ तोड़ इनपुट इतिहास
वैकल्पिक रूप से, अगर आप सिर्फ इतिहास के अलग-अलग लाइनों को फिर से चलाने के लिए चाहते हैं से संबंधित चाल के लिए Entering input की जाँच को देखने के इतिहास hist
आदेश का उपयोग करें और फिर पुनरावृत्ति यह hist --replay
का उपयोग कर इस प्रकार है:
[37] (pry) main: 0> puts "hello world"
hello world
=> nil
[38] (pry) main: 0> hist --tail
9699: _file_
9700: (1..10).map do |v|
9701: (1..5).map do |v|
9702: v * 2
9703: end
9704: play -i 31
9705: _
9706: hist --tail
9707: hist -r
9708: puts "hello world"
[39] (pry) main: 0> hist --replay 9708
hello world
=> nil
[41] (pry) main: 0>
वैकल्पिक रूप से, अगर आप सिर्फ अंतिम पंक्ति इनपुट पुनः चलाने के लिए चाहते हैं, और आप up arrow
(whateve के लिए उपयोग करने के लिए नहीं करना चाहते हैं आर कारण) तो बस उपयोग करें: hist --replay -1
। हमेशा विकी में more info on the hist command होता है।
कुछ हद तक संबंधित।
IRB
में, अंतिम निष्पादित आदेश का परिणाम _
में सहेजा गया है। आप इसका इस्तेमाल भी कर सकते हैं।
उदाहरण
1.9.3p194 :001 > 2 + 2
=> 4
1.9.3p194 :002 > _
=> 4
1.9.3p194 :003 > _ * 3
=> 12
1.9.3p194 :004 > _
=> 12
यह rails console
में विशेष रूप से, मेरे लिए बहुत उपयोगी साबित हुई।
तुम भी
आईआरबी --tracer
अब ऊपर तीर आईआरबी आदेशों के माध्यम से वापस जाना होगा के साथ इसे शुरू करने से आईआरबी में आदेश पश्व-अनुरेखन कर सकते हैं। (रूबी 2.3.3 का उपयोग करना)
नमस्ते, ऑफ़सेट का उपयोग करने के बजाय, मैंने पाया कि हम उस लाइन नंबर को डाल सकते हैं जिसे हम दोहराना चाहते हैं .. धन्यवाद! अतिरिक्त विधि के साथ मैं इसे आसानी से कर सकता हूं! –