为什么irb将控制字符插入反向交互式搜索缓冲区?

时间:2011-01-12 04:31:27

标签: ruby readline irb control-characters ledit

如果我在irb中进行反向交互式搜索,然后输入一个控制字符(箭头键是我实际看到的唯一一个)。所以我从这个会议开始:

$ irb
>> print "hello"
hello

然后输入^rh

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

到目前为止一切顺利。然后我点击左箭头,我最终得到了这个:

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

随后使用箭头会正常移动光标。

2 个答案:

答案 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/.inputrcset editing-mode vi文件中打开了它。禁用它“修复”我的箭头键。

如@JoLiss所述,其他readline程序(bash等)也正常工作;所以AFAICT,这是一个Ruby问题。请参阅:http://bugs.ruby-lang.org/issues/7859#change-36333