IRB历史记录不适用于Ruby 2.3.0

IRB历史记录不适用于Ruby 2.3.0,ruby,macos,readline,irb,ruby-2.3,Ruby,Macos,Readline,Irb,Ruby 2.3,我已经通过rbenv在OS X 10.11.4上安装了Ruby 2.3.0p0。在IRB会议中,历史工作正常。但是,我无法跨会话访问IRB历史记录 我尝试了我的系统Ruby,2.0.0p648,IRB会话的历史记录运行良好。我试着通过rbenv安装同一版本的Ruby,它也有运行历史 我比较了工作会话和非工作会话的IRB.conf的值,没有什么不合适的地方(尽管奇怪的是,IRB/ext/save-history.rb在这两种情况下都是空白文件) 查看my.irb_历史文件,它似乎正在被最新会话中的

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

我尝试了我的系统Ruby,2.0.0p648,IRB会话的历史记录运行良好。我试着通过rbenv安装同一版本的Ruby,它也有运行历史

我比较了工作会话和非工作会话的
IRB.conf
的值,没有什么不合适的地方(尽管奇怪的是,IRB/ext/save-history.rb在这两种情况下都是空白文件)

查看my.irb_历史文件,它似乎正在被最新会话中的命令替换,而不是附加。我可以加载一个2.0.0IRB会话,然后滚动浏览这些命令

我尝试了中列出的答案,但没有成功

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

我可以通过
Readline.Readline
将我的.irb_历史记录中的前几行添加到Readline历史记录中,并指定add_hist=true,从而对历史记录进行排序。但是,将前面的命令添加到Readline肯定不是正确的方法

我知道我可以切换到像pry这样的东西,但我想弄清楚这一点。
关于为什么不将这些命令添加到Readline以及如何更改这些命令的任何建议?

OSX的命令行编辑基于libedit库。OSX有一个版本的readline库,它是libedit的包装器,但它的行为并不完全像GNU readline。irb历史在Ruby中工作,Ruby是使用OSX的包装器构建的,最高可达Ruby 2.1,但Ruby 2.2及更高版本需要使用GNU readline构建,irb历史才能工作

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

使用自制软件

如果您使用自制软件安装ruby,它将附带readline的工作版本

  • brew安装ruby
然后按照说明将其添加到路径中。然后
gem安装irb
如果它说
找不到gem irb

使用MacPorts

rbenv不知道MacPorts,所以您需要明确告诉它使用MacPorts的readline

  • sudo端口安装readline
    (如果尚未安装)
  • rbenv卸载2.3.0
  • RUBY\u CONFIGURE\u OPTS=--with readline dir=/opt/local rbenv install 2.3.0
使用自制的rbenv

,因此,如果您使用的是自制软件,而irb历史记录不起作用,那么您要么没有安装readline,要么在安装readline之前构建了Ruby

  • brew安装readline
    如果尚未安装
  • rbenv卸载2.3.0
  • rbenv安装2.3.0

谢谢你,戴夫!现在编译,一旦我可以验证,将接受。顺便说一句,作为我正在做的研究的一部分,我刚刚对你的问题/答案投了赞成票。我写这篇文章是调查irb问题的副产品。谢谢,我在运行
rails控制台时遇到了这个问题,Ruby是通过rbenv安装的。此外,我还将得到错误“无法读取termcap数据库;使用哑终端设置”。这似乎也解决了这个问题。为了使其正常工作,我将
IRB.conf[:SAVE_HISTORY]=100000
添加到
~/.irbrc
。我认为不设置
SAVE_HISTORY
有点不同:如果你忘记了这一点,历史不会被写下来,而不是取代上一节课的历史。你说的一件事对我来说似乎很奇怪:你说save-history.rb是空的。我的
~/.rbenv/versions/2.3.0/lib/ruby/2.3.0/irb/ext/save history.rb
充满了使历史工作的代码。我想如果你的是空白的,irb历史记录在有或没有readline.Hmm的情况下都不起作用。我没有我原来的2.3.0了,但我只是回去看看我的2.0.0,save-history.rb文件中确实有代码。我没有任何解释,除了我的大脑因为在这个问题上到处挖掘而有点发疯。