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

Joh*_*hir 5 ruby irb readline control-characters ledit

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

$ irb
>> print "hello"
hello
Run Code Online (Sandbox Code Playgroud)

然后进入^r,h

$ irb
>> print "hello"
hello
(reverse-i-search)`he': print "hello"
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.然后我点击了左箭头,我最终得到了这个:

$ irb
>> print "hello"
hello
>> print "[Dhello"
Run Code Online (Sandbox Code Playgroud)

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

Jo *_*iss 3

这不能解决您的问题,但至少我可以回答您提出的问题(原因):

左箭头以三个字符 ESC、[ 和 D 的形式输入终端。(您可以通过键入read并按左箭头来测试这一点,该箭头显示^[[D,其中^[是转义字符的呈现方式。)

以某种方式irb在不应该的情况下拾取 ESC 字符;因此 ESC 结束历史搜索,并按[D字面意思输入。查看使用 readline 的其他程序,Bash 和 Python 的行为正确,但是ledit(是的,晦涩难懂 - 抱歉 ^^)也遇到了这个问题。

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