【问题标题】:irb history saving but not loadingirb 历史保存但不加载
【发布时间】: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 包含曾经输入的所有命令。但&lt;up&gt; 仍然没有效果。看起来像一个读线问题?
  • 尝试Ctrl+R 并开始输入历史记录中显示的命令。是否出现在提示行中?
  • 不。似乎是 ruby​​+readline 的问题。
  • 好吧,我的错。我重新编译了红宝石。在选项菜单中,我启用了 libedit 而不是 readline。我改变了这个,重建了,现在它可以工作了。

标签: ruby readline irb


【解决方案1】:

在 FreeBSD 上,编译 ruby​​ 需要使用 readline 支持,而不是 libedit。

【讨论】:

  • 这个答案也适用于 macOS 附带的 Ruby。安装任何其他 Ruby(来自 Homebrew 或任何 Ruby 版本管理器)可以解决这个问题。
猜你喜欢
  • 2012-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2011-01-05
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多