IRB历史记录不适用于Ruby 2.3.0
我已经通过rbenv在OS X 10.11.4上安装了Ruby 2.3.0p0。在IRB会议中,历史工作正常。但是,我无法跨会话访问IRB历史记录 我尝试了我的系统Ruby,2.0.0p648,IRB会话的历史记录运行良好。我试着通过rbenv安装同一版本的Ruby,它也有运行历史 我比较了工作会话和非工作会话的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_历史文件,它似乎正在被最新会话中的
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
如果尚未安装brew安装readline
rbenv卸载2.3.0
rbenv安装2.3.0
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文件中确实有代码。我没有任何解释,除了我的大脑因为在这个问题上到处挖掘而有点发疯。