2011-01-12 27 views
5

如果我在irb中進行反向交互式搜索,然後輸入一個控制字符(箭頭鍵是我真正見過的唯一的字符)。所以,我開始與這個會話:爲什麼irb將控制字符插入到我的反向交互搜索緩衝區中?

$ irb 
>> print "hello" 
hello 

然後輸入^rh

$ irb 
>> print "hello" 
hello 
(reverse-i-search)`he': print "hello" 

到目前爲止好。然後我點擊左箭頭,結果如下:

$ irb 
>> print "hello" 
hello 
>> print "[Dhello" 

隨後使用箭頭將光標正常移動。

+2

我建議你添加標籤`readline`。 – 2011-01-12 17:56:08

回答

3

這不會解決你的問題,但至少我可以回答你問的問題(該幹嘛):

左箭頭被輸入到終端爲三個大字,ESC,[,和D. (您可以通過鍵入read並按左箭頭,顯示^[[D,其中^[是轉義字符被渲染方式進行測試。)

不知何故irb拿起ESC的時候它不應該字符;所以ESC結束歷史搜索,並逐字輸入[D。看着其他程序使用readline,Bash和Python的行爲是正確的,但ledit(是的,晦澀 - 對不起^^)也有這個問題。

除非有人知道這個解決方案,唯一的解決辦法是我可以想到的是按ESC而不是箭頭鍵退出歷史記錄搜索。或者,如果您不需要進一步編輯,則可以進入回車。

+1

我不知道/意識到按ESC將選擇歷史項目,並將光標留在原位,這樣本身就非常有用。 (我一直在做control-a或control-e) – 2011-01-12 18:25:32

1

您是否啓用了vi編輯模式?

~ $ irb 
1.9.3p392 :001 > Readline.vi_editing_mode? 
    => true 

我有它通過set editing-mode vi在我$HOME/.inputrc文件打開。禁用它「固定」我的箭頭鍵。

正如@JoLiss所述,其他readline程序(bash等)也正常工作;所以AFAICT,這是一個Ruby問題。參見:http://bugs.ruby-lang.org/issues/7859#change-36333

相關問題