ruby - 为什么 irb 将控制字符插入到我的反向交互搜索缓冲区中?

标签 ruby readline irb control-characters ledit

如果我在 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/

相关文章:

ruby - Rails irb 默认目录

mysql - Ruby on Rails - MySQL 错误的字符串值

ruby - 如何使用 Ruby 和 MongoId 正确保存时区?

ipython - 在 IPython qtconsole 中启用 vi 键绑定(bind)

Python readline 空行

ruby-on-rails - 从 pry 动切换到 IRB

ruby-on-rails - 如何为独立的 ruby​​ 程序编写像 before_filter 和 after_filter 这样的 rails

ruby-on-rails - 在 Ruby/Rails 中隔离数据访问层的最佳实践

node.js - 如何使用quirer.prompt为输入添加前缀

ruby-on-rails - 如何在 .irbrc 中需要 gem,而不需要将其添加到 Rails Gemfile 中?