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)
随后使用箭头会使光标正常移动.
这不能解决您的问题,但至少我可以回答您提出的问题(原因):
左箭头以三个字符 ESC、[ 和 D 的形式输入终端。(您可以通过键入read并按左箭头来测试这一点,该箭头显示^[[D,其中^[是转义字符的呈现方式。)
以某种方式irb在不应该的情况下拾取 ESC 字符;因此 ESC 结束历史搜索,并按[D字面意思输入。查看使用 readline 的其他程序,Bash 和 Python 的行为正确,但是ledit(是的,晦涩难懂 - 抱歉 ^^)也遇到了这个问题。
除非有人知道这个问题的解决方案,否则我能想到的唯一解决方法是按 ESC 而不是箭头键退出历史搜索。当然,如果您不需要进一步编辑,也可以按 Enter 键。