IRB历史不适用于Ruby 2.3.0

时间:2016-06-16 00:12:38

标签: ruby macos readline irb ruby-2.3

我在OS X 10.11.4上通过rbenv安装了Ruby 2.3.0p0。在IRB会议期间,历史记录正常。但是,我无法跨会话访问IRB历史记录。

我尝试了我的系统Ruby,2.0.0p648,并且跨IRB会话的历史记录工作正常。我尝试通过rbenv安装相同版本的Ruby,它也有工作历史。

我已经比较了IRB.conf在工作和非工作会话之间的值,没有任何看起来不合适(尽管奇怪的是, irb / ext / save-history.rb 在两种情况下都是空白文件。)

查看我的.irb_history文件,它似乎被替换而不是追加来自最新会话的命令。我可以加载2.0.0 IRB会话并滚动这些命令就好了。

我已尝试rbenv irb history is not saving中列出的答案但没有成功。

我还尝试了irb history not working中的选定答案。 我不得不改变选择的答案来替换#nitems方法。这表明正在从历史文件中读出行,并将其推送到Readline::HISTORY。但是,检查Readline::HISTORY并没有显示任何内容。

我可以通过{.1}}将我的.irb_history中的前一行添加到Readline历史记录,并指定add_hist = true来破坏历史记录。但是,绝对不是将以前的命令添加到Readline的正确方法。

我知道我可以切换到类似pry的东西,但我想知道这一点。 关于为什么命令没有被添加到Readline以及如何更改它的任何建议?

1 个答案:

答案 0 :(得分:36)

OS X的命令行编辑基于libedit库。 OS X有一个readline库的版本,它是libedit的包装器,但它的行为与GNU readline完全不同。 irb history在Ruby中运行,使用OS X的Ruby 2.1包装,但是Ruby 2.2及更高版本需要使用GNU readline构建,以便irb历史工作。

在下文中,2.3.0可以是2.2.0以上的任何Ruby版本。我写了2.3.0因为这就是埃文所用的。

使用MacPorts

rbenv不了解MacPorts,因此您需要明确告诉它使用MacPorts的readline。

  • sudo port install readline如果尚未安装。
  • rbenv uninstall 2.3.0
  • RUBY_CONFIGURE_OPTS=--with-readline-dir=/opt/local rbenv install 2.3.0

使用Homebrew

rbenv automatically detects homebrew and looks in it for readline,所以,如果你使用Homebrew并且irb历史记录不起作用,你要么没有安装readline,要么在安装readline之前构建了Ruby。

  • brew install readline如果尚未安装
  • rbenv uninstall 2.3.0
  • rbenv install 2.3.0