如果我在irb中进行反向交互式搜索,然后输入一个控制字符(箭头键是我实际看到的唯一一个)。所以我从这个会议开始:
$ irb
>> print "hello"
hello
然后输入^r
,h
$ irb
>> print "hello"
hello
(reverse-i-search)`he': print "hello"
到目前为止一切顺利。然后我点击左箭头,我最终得到了这个:
$ irb
>> print "hello"
hello
>> print "[Dhello"
随后使用箭头会正常移动光标。
答案 0 :(得分:3)
这不会解决您的问题,但至少我可以回答您提出的问题(为什么):
左箭头以三个字符ESC,[和D进入终端。(您可以通过键入read
并按左箭头来显示^[[D
,其中{ {1}}是转义字符的呈现方式。)
以某种方式^[
选择ESC字符时不应该;所以ESC结束历史搜索,irb
从字面上输入。使用readline查看其他程序,Bash和Python的行为正确,但是[D
(是的,模糊 - 抱歉^^)也遇到了这个问题。
除非有人知道这方面的解决方案,否则我能想到的唯一解决方法是按ESC键而不是箭头键退出历史记录搜索。或者,如果您不需要进一步编辑,请点击输入。
答案 1 :(得分:1)
您是否启用了vi编辑模式?
~ $ irb
1.9.3p392 :001 > Readline.vi_editing_mode?
=> true
我通过$HOME/.inputrc
在set editing-mode vi
文件中打开了它。禁用它“修复”我的箭头键。
如@JoLiss所述,其他readline程序(bash等)也正常工作;所以AFAICT,这是一个Ruby问题。请参阅:http://bugs.ruby-lang.org/issues/7859#change-36333