【发布时间】:2018-08-01 10:43:41
【问题描述】:
我在 FreeBSD 上的 ruby 2.3.5 下将以下 .irbrc 与 irb 一起使用:
require 'irb/completion'
require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 10000
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:USE_READLINE] = true
IRB.conf[:HISTORY_FILE] = "/home/ebot/.irb_history"
当我退出 irb 时,历史记录按预期保存到 /home/ebot/.irb_history。但是,当我启动另一个 irb 会话时,Readline::History 列表为空,按 <up> 键没有任何效果。
我将以下代码放入我的.irbrc:
if File.exist?(IRB.conf[:HISTORY_FILE]) then
prev = ''
File.open(IRB.conf[:HISTORY_FILE]).each do |line|
line.chomp!
if line.length > 0 then
if line != prev then
puts "pushing hist <#{line}>"
Readline::HISTORY.push(line)
prev = line
end
end
end
end
当我用这个执行 irb 时,我看到上面的输出有几行,但历史仍然是空的:
% irb
irb(main):001:0> 1+1
=> 2
irb(main):002:0> 3+3
=> 6
irb(main):003:0> ^D
% cat .irb_history
1+1
3+3
% irb
pushing hist <1+1>
pushing hist <3+3>
irb(main):001:0> Readline::HISTORY.to_a
=> ["Readline::HISTORY.to_a"]
所以,irb 似乎在执行.irbrc 后重置/清空了这个列表。
我该如何解决这个问题?
【问题讨论】:
-
使用
pry而不是 IRB,因为它总体上要好得多,并且支持您可能需要的一切,包括开箱即用的历史记录。 -
太好了,我也遇到了同样的问题 pry :( 唯一的区别是,
.pry_history包含曾经输入的所有命令。但<up>仍然没有效果。看起来像一个读线问题? -
尝试
Ctrl+R并开始输入历史记录中显示的命令。是否出现在提示行中? -
不。似乎是 ruby+readline 的问题。
-
好吧,我的错。我重新编译了红宝石。在选项菜单中,我启用了 libedit 而不是 readline。我改变了这个,重建了,现在它可以工作了。