5

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

$ irb
>> print "hello"
hello

然后输入^rh

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

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

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

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

4

2 回答 2

3

这不会解决您的问题,但至少我可以回答您提出的问题(为什么):

左箭头作为三个字符输入终端,ESC、[ 和 D。(您可以通过键入read并按下左箭头来测试这一点,它显示^[[D,转义字符在哪里^[呈现。)

不知何故irb,它不应该拿起 ESC 字符;所以 ESC 结束历史搜索,并按[D字面意思输入。查看使用 readline 的其他程序,Bash 和 Python 行为正确,但是ledit(是的,晦涩难懂——抱歉 ^^)也有这个问题。

除非有人知道解决方案,否则我能想到的唯一解决方法是按 ESC 而不是箭头键退出历史搜索。当然,如果您不需要进一步编辑,或者按 Enter 键。

于 2011-01-12T17:55:55.513 回答
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

于 2013-04-26T09:29:02.227 回答