答えて
def repeat_last_irb
eval(IRB.CurrentContext.io.line(-2))
end
、あなたは最後の入力を実行するために、あなたの中にIRBコンソールをreplat_last_irb
を使用することができます。
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 > ">
このオブジェクトのすべてのIO情報をIRB保存し、あなたの入力すべての行を取得するために定額法で:
IRB.CurrentContext.ioは以下のようです。
したがって、最後の入力を繰り返すためにevalを使用できます。
番号の付いた履歴サポート(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
ya、私はirbラインコマンドが増加する数を持っていることがわかります。 –
@RobertAHenruは私の答えを編集しました:) – kfb
ya .. that works!どうも! –
irb REPLはネイティブにhistory expansionをサポートしていませんが、あなたが探しているようです。堅実な代替手段として、REPLはreplayコマンドを提供しています。
バック歴史の中でのステップだけのカップルよりもある、以前のコマンドを繰り返す(または変更)する最も簡単な方法は、いくつかのサブ続いはCtrl +Rを入力して検索することです問題のコマンド。
GNU Readline libraryで提供されるその他のキーボードショートカットについては、hereを参照してください。それらは多くのシェルや他のアプリケーションでもサポートされています。
いいですが、Ctrl-Rは 'irb'ではサポートされていません。 – kfb
@r_は真ではありません。 IRBはCtrl-Rをサポートしています(ruby 1.9.3)。私はそれが実際にはreadlineの機能だと思うので、おそらくあなたのlibreadlineのバージョンに依存します。 – d11wtq
これは長年にわたりlibreadlineにあったので、Ruby/IRBがlibreadlineのサポートでコンパイルされたかどうかの問題です。 Ruby/IRBのインストール/コンパイル時にlibreadlineがインストールされている限り、それが必要です。 libreadlineがなければ、矢印キーを使って履歴をナビゲートすることはできないでしょう。 –
と入力し、Pry REPLは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をチェックしてください見ます
また[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>
、あなただけの最後の行の入力を再生したい、とあなたはwhateveのために(up arrow
を使用したくない場合は、次のようにhist --replay
を使用して、それを再生し、その後hist
コマンドを使用し、歴史r理由)を使用してください:hist --replay -1
。いつものようにwikiには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
で、私にとって非常に有用であることが判明しました。
はまた
IRB --tracer
IRBコマンドスルー戻ります今まで矢印でそれを開始することにより、IRBのコマンドをバックトレースすることができます。 (Ruby 2.3.3を使用)
- 1. フォームリストをMoquiで繰り返すことはできますか?
- 2. grep regexpでマッチを繰り返すことはできますか?
- 3. サブプロセスでコマンドを繰り返す.Popen
- 4. JavaでUnixコマンドを繰り返す
- 5. "C056_CompositeRaceorEthnicityInformation"レコードが834で繰り返すことができます
- 6. Luaで辞書を繰り返すことができるイテレータを作ることはできますか?
- 7. コレクションを繰り返すことができません
- 8. クリックイベントを繰り返すことができません
- 9. whileループを繰り返すことができません
- 10. ドットコマンドは何を正確に繰り返すことができますか?
- 11. なぜこのjQuery load() - コマンドが繰り返されますか?
- 12. 1年にJava 8で毎週繰り返すことができますか?
- 13. この繰り返しをXMLで書き直すことはできますか?
- 14. ここで奇妙に繰り返されるテンプレートパターンを使用することはできますか(C++)?
- 15. 間違っ繰り返しで文字の結果を繰り返すこと
- 16. AESは、ここでは繰り返し
- 17. C++コンソールアプリケーションでのコマンドの繰り返し
- 18. pygameで繰り返しコマンドを実行するには?
- 19. JSTLでハッシュマップのarraylistを繰り返すことができません
- 20. コードが繰り返されないときに繰り返す
- 21. nodejs child_processes.execは 'nohup'コマンドを返すことができません
- 22. pythonで同じ要素を1つのリストで繰り返すことで無限回繰り返す方法
- 23. forループのいくつかの繰り返しをスキップして、Matlabで他の繰り返しを行うことはできますか?
- 24. Androidでスレッドを繰り返し使用できますか?
- 25. オブジェクトを繰り返すこと
- 26. スプライト画像の中でバックグラウンドストリップを繰り返すことは可能ですか?
- 27. は、%Q表記でエスケープすることはここではIRB
- 28. 私はjavascriptで行を繰り返すことはできません..詳細はこちら
- 29. Visual Studio 2008でコレクションに対して繰り返し単体テストを繰り返すことはできますか?
- 30. for..inを使わずにjavascriptでjsonを繰り返すことはできますか?
こんにちは、オフセットを使用するのではなく、繰り返したい行番号を置くことができます。ありがとう!私はそれを簡単に行うことができる追加の方法で! –