IRB 历史不适用于 Ruby 2.3.0
IRB history not working with Ruby 2.3.0
我在 OS X 10.11.4 上通过 rbenv 安装了 Ruby 2.3.0p0。在 IRB session 中,历史记录工作正常。但是,我无法跨 session 访问 IRB 历史记录。
我尝试了我的系统 Ruby、2.0.0p648,IRB sessions 的历史记录工作正常。我尝试通过 rbenv 安装相同版本的 Ruby,它也有工作历史。
我比较了工作和非工作 session 之间 IRB.conf
的值,没有任何地方看起来不合适(尽管很奇怪,irb/ext/save-history。 rb 在这两种情况下都是空白文件)。
查看我的 .irb_history 文件,它似乎被最新 session 中的命令替换,而不是附加。我可以加载 2.0.0 IRB session 并滚动浏览这些命令就好了。
我尝试了 rbenv irb history is not saving 中列出的答案,但没有成功。
我也尝试了irb history not working中选择的答案。
我不得不更改所选答案以替换#nitems 方法。这表明正在从历史文件中读出行,并将其推送到 Readline::HISTORY
。但是,检查 Readline::HISTORY
那里什么也没有。
我可以通过 Readline.readline
将我的 .irb_history 中的前几行添加到 Readline 历史记录,并指定 add_hist=true 来破解历史记录。但是,将以前的命令添加到 Readline 绝对不是正确的方法。
我知道我可以切换到 pry 之类的东西,但我想解决这个问题。
关于为什么没有将命令添加到 Readline 以及如何更改它的任何建议?
OS X的命令行编辑是基于libedit库的。 OS X 有一个版本的 readline 库,它是 libedit 的包装器,但它的行为并不完全像 GNU readline。 irb history 可以在 Ruby 中使用 OS X 的包装器构建到 Ruby 2.1,但是 Ruby 2.2 及更高版本需要使用 GNU readline 构建才能使 irb history 工作。
下面的2.3.0
可以是2.2.0以上的任意Ruby版本。我写了 2.3.0
因为那是 Evan 使用的。
使用 Homebrew
如果您使用 homebrew 安装 ruby,它将带来 readline 的工作版本。
brew install ruby
然后按照说明将其添加到您的 PATH 中。然后 execute gem install irb
如果它说 can't find gem irb
.
使用 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 结合使用
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
我在 OS X 10.11.4 上通过 rbenv 安装了 Ruby 2.3.0p0。在 IRB session 中,历史记录工作正常。但是,我无法跨 session 访问 IRB 历史记录。
我尝试了我的系统 Ruby、2.0.0p648,IRB sessions 的历史记录工作正常。我尝试通过 rbenv 安装相同版本的 Ruby,它也有工作历史。
我比较了工作和非工作 session 之间 IRB.conf
的值,没有任何地方看起来不合适(尽管很奇怪,irb/ext/save-history。 rb 在这两种情况下都是空白文件)。
查看我的 .irb_history 文件,它似乎被最新 session 中的命令替换,而不是附加。我可以加载 2.0.0 IRB session 并滚动浏览这些命令就好了。
我尝试了 rbenv irb history is not saving 中列出的答案,但没有成功。
我也尝试了irb history not working中选择的答案。
我不得不更改所选答案以替换#nitems 方法。这表明正在从历史文件中读出行,并将其推送到 Readline::HISTORY
。但是,检查 Readline::HISTORY
那里什么也没有。
我可以通过 Readline.readline
将我的 .irb_history 中的前几行添加到 Readline 历史记录,并指定 add_hist=true 来破解历史记录。但是,将以前的命令添加到 Readline 绝对不是正确的方法。
我知道我可以切换到 pry 之类的东西,但我想解决这个问题。 关于为什么没有将命令添加到 Readline 以及如何更改它的任何建议?
OS X的命令行编辑是基于libedit库的。 OS X 有一个版本的 readline 库,它是 libedit 的包装器,但它的行为并不完全像 GNU readline。 irb history 可以在 Ruby 中使用 OS X 的包装器构建到 Ruby 2.1,但是 Ruby 2.2 及更高版本需要使用 GNU readline 构建才能使 irb history 工作。
下面的2.3.0
可以是2.2.0以上的任意Ruby版本。我写了 2.3.0
因为那是 Evan 使用的。
使用 Homebrew
如果您使用 homebrew 安装 ruby,它将带来 readline 的工作版本。
brew install ruby
然后按照说明将其添加到您的 PATH 中。然后 execute gem install irb
如果它说 can't find gem irb
.
使用 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 结合使用
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