回答
def repeat_last_irb
eval(IRB.CurrentContext.io.line(-2))
end
那麼你可以使用replat_last_irb
你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 > ">
這個對象保存IRB所有IO信息,並用線方法來獲取每行你輸入。
所以,我們可以使用eval重複上一次輸入。
我不認爲有任何種類的編號歷史支持(例如像gdb
),但您可以使用箭頭鍵瀏覽歷史記錄,就像在shell中一樣。
更新
事實證明我完全錯了,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
irb REPL本身不支持history expansion,這正是您所尋找的。對於一個可靠的替代品,撬REPL提供了replay命令。
重複(或修改)更早的命令,它不只是一對夫婦的步驟,早在歷史上更多的最快方法,是通過輸入按Ctrl + [R隨後的一些子尋找它有問題的命令。
有關GNU Readline library提供的更多鍵盤快捷鍵,請參閱here。它們也受許多shell和其他應用程序的支持。
不談,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了與使用和操作輸入歷史
另外,如果你想只重播歷史的各條線,你可以先查看其他技巧使用歷史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
。一如既往的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命令。 (使用Ruby 2.3.3)
- 1. 我可以(重新)在vim中映射Ex命令嗎?
- 2. 我可以在一個命令中重定向兩頁嗎?
- 3. Bukkit命令重複嗎?
- 4. 點命令可以重複什麼?
- 5. 我可以grep telnet命令輸出嗎?
- 6. 我可以使用單個「複製」命令在Windows命令行上覆制多個命名文件嗎?
- 7. 我可以只爲複合命令定義環境變量嗎?
- 8. 我可以將密碼回覆給兩個命令嗎?
- 9. 可以在POSIX shell中使用命令替換命令嗎?
- 10. 在irb中運行多個命令
- 11. 我可以重命名Main.mxml嗎?
- 12. 我們可以在另一個awk命令中運行awk/sed命令嗎?
- 13. 重命名Flyway可重複遷移可以嗎?
- 14. 我可以重複使用ValueAnimator嗎?
- 15. 我可以在一個bash行中嵌入命令嗎?
- 16. 我可以在django中使用簡單的sql命令嗎
- 17. 我們可以在python中運行ipython命令嗎?
- 18. 我可以在rake任務中使用rak命令嗎?
- 19. 我可以在android應用程序中運行jdk命令嗎?
- 20. 我可以在SourceTree中使用嵌入式hg命令行嗎?
- 21. 我可以在命令行中添加Maven存儲庫嗎?
- 22. 我可以在bash編程中使用vi命令(eg.5DD)嗎?
- 23. 我可以在Node中執行字符串命令嗎?
- 24. 我可以在Slack斜槓命令中使用@嗎?
- 25. 我可以在Windows命令行中測試tesseract ocr嗎?
- 26. 我可以在R會話中調用linux shell命令嗎?
- 27. 我可以在groovy文件中運行mongorestore命令嗎?
- 28. $ target_path可以重命名嗎?
- 29. 我可以在WebMatrix中重命名網站嗎?
- 30. 在ColdFusion中,我可以使用CFPDF重命名PDF Form Field嗎?
嗨,而不是使用偏移量,我發現我們可以把我們想要重複的行號..謝謝!用額外的方法我可以輕鬆做到! –