如果我在 irb 中进行反向交互式搜索,然后输入一个控制字符(箭头键是我实际看到的唯一一个)。所以我从这个 session 开始:
$ irb
>> print "hello"
hello
然后输入^r
, h
$ irb
>> print "hello"
hello
(reverse-i-search)`he': print "hello"
到目前为止一切顺利。然后我点击向左的箭头,结果是这样的:
$ irb
>> print "hello"
hello
>> print "[Dhello"
随后使用箭头可以正常移动光标。
最佳答案
这不会解决您的问题,但至少我可以回答您提出的问题(原因):
左箭头作为三个字符输入终端,ESC、[ 和 D。(您可以通过键入 read
并按左箭头来测试这一点,这将显示 ^[ [D
,其中 ^[
是转义字符的渲染方式。)
不知何故 irb
在不应该的时候选择了 ESC 字符;所以 ESC 结束历史搜索,并且 [D
被逐字输入。查看其他使用 readline 的程序,Bash 和 Python 运行正常,但是 ledit
(是的,晦涩难懂 -- 抱歉 ^^)也有这个问题。
除非有人知道解决方案,否则我能想到的唯一解决方法是按 ESC 而不是箭头键来退出历史搜索。当然,如果您不需要进一步编辑,也可以按 Enter。
关于ruby - 为什么 irb 将控制字符插入到我的反向交互搜索缓冲区中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4665349/