ruby irb历史不工作

zlwx9yxi  于 2023-06-22  发布在  Ruby
关注(0)|答案(7)|浏览(152)

在~/.irbrc中,我有这些行:

require 'irb/ext/save-history'
#History configuration
IRB.conf[:SAVE_HISTORY] = 100
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"

然而,当我运行irb并点击向上箭头时,什么也没有发生。另外,指定的irb历史文件没有被创建,并且没有任何东西被记录到它。

qkf9rpyu

qkf9rpyu1#

irb history在Debian Linux中开箱即用。没有etc/irbrc,也没有~/. irbrc。所以,嗯。
This person在他的irbrc里放的比你多。你认为ARGV.concat可能是缺失的部分吗?

require 'irb/completion'
require 'irb/ext/save-history'
ARGV.concat [ "--readline", "--prompt-mode", "simple" ]
IRB.conf[:SAVE_HISTORY] = 100
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
ryoqjall

ryoqjall2#

我不知道上面为什么不工作,但我确实在我的系统(OS X - Snow Leopard,Ruby 1.8.7)上找到了一个文件/etc/irbrc,它确实为我提供了一个工作的,持久的历史记录。所以有两条建议:i)检查您的/etc/irbrc(或等效的),以确保其中没有任何可能干扰您的设置的内容,ii)尝试以下设置,看看您是否可以以这种方式获得历史记录。

# Some default enhancements/settings for IRB, based on
# http://wiki.rubygarden.org/Ruby/page/show/Irb/TipsAndTricks

unless defined? ETC_IRBRC_LOADED

  # Require RubyGems by default.
  require 'rubygems'

  # Activate auto-completion.
  require 'irb/completion'

  # Use the simple prompt if possible.
  IRB.conf[:PROMPT_MODE] = :SIMPLE if IRB.conf[:PROMPT_MODE] == :DEFAULT

  # Setup permanent history.
  HISTFILE = "~/.irb_history"
  MAXHISTSIZE = 100
  begin
    histfile = File::expand_path(HISTFILE)
    if File::exists?(histfile)
      lines = IO::readlines(histfile).collect { |line| line.chomp }
      puts "Read #{lines.nitems} saved history commands from '#{histfile}'." if $VERBOSE
      Readline::HISTORY.push(*lines)
    else
      puts "History file '#{histfile}' was empty or non-existant." if $VERBOSE
    end
    Kernel::at_exit do
      lines = Readline::HISTORY.to_a.reverse.uniq.reverse
      lines = lines[-MAXHISTSIZE, MAXHISTSIZE] if lines.nitems > MAXHISTSIZE
      puts "Saving #{lines.length} history lines to '#{histfile}'." if $VERBOSE
      File::open(histfile, File::WRONLY|File::CREAT|File::TRUNC) { |io| io.puts lines.join("\n") }
    end
  rescue => e
    puts "Error when configuring permanent history: #{e}" if $VERBOSE
  end

  ETC_IRBRC_LOADED=true
end
svdrlsy4

svdrlsy43#

这是一个已知的bug,有补丁可用。最简单的解决方案是覆盖save-history.rb:
/usr/lib/ruby/1.8/irb/ext/save-history.rb
固定版本:
http://pastie.org/513500
或者一次完成:

wget -O /usr/lib/ruby/1.8/irb/ext/save-history.rb http://pastie.org/pastes/513500/download
jobtbby3

jobtbby34#

检查一下,确保你用libreadline构建了ruby,因为irb history似乎没有它就不能工作。

wdebmtf2

wdebmtf25#

如果您有额外的irb配置文件,也可能发生这种情况,例如~/.irbrc。如果是这样的话,将liwp的答案中的内容复制到额外的配置中,它应该可以工作。

gojuced7

gojuced76#

我在ubuntu 20.04上遇到了同样的问题,并通过运行以下命令修复了它:

gem install irb
anauzrmj

anauzrmj7#

您可能只需要设置IRBRC环境变量。添加到您的~/.bash_profile或同等产品,

export IRBRC=~/.irbrc

其中可以/应该包含:

require 'irb/ext/save-history'
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:HISTORY_FILE] = File.expand_path('~/.irb_history')

相关问题