História do IRB não está funcionando
Pergunta
Em ~/.irbrc eu tenho estas linhas:
require 'irb/ext/save-history'
#History configuration
IRB.conf[:SAVE_HISTORY] = 100
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
E ainda quando eu corro irb
E acerte a flecha para cima, nada acontece. Além disso, o arquivo de histórico do IRB especificado não está sendo criado e nada está registrado nele.
Solução
Não tenho uma resposta para você por que o acima não funciona, mas encontrei um arquivo, /etc/irbrc
No meu sistema (OS X - Snow Leopard, Ruby 1.8.7) que fornece uma história persistente e funcional para mim. Portanto, dois conselhos: i) Verifique o seu /etc /irbrc (ou equivalente) para garantir que não haja nada lá que possa interferir nas suas configurações e ii) Experimente as configurações abaixo para ver se você pode obter história funcionando dessa maneira.
# 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
Outras dicas
A história do IRB funciona no Debian Linux fora da caixa. Não há etc/irbrc, nem tenho um ~/.irbrc. Então, hmmmm.
Esta pessoa Coloque um pouco mais no seu Irbrc do que você. Você acha que o argv.concat poderia ser a peça que faltava?
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"
Este é um bug conhecido com um patch disponível. Solução mais fácil é substituir o salvador de salvamento.rb:
/usr/lib/ruby/1.8/irb/ext/save-history.rb
com uma versão fixa:
ou fazer isso de uma só vez:
wget -O /usr/lib/ruby/1.8/irb/ext/save-history.rb http://pastie.org/pastes/513500/download
Verifique se você construiu o Ruby com o Liberadline, pois o histórico do IRB parece não funcionar sem ele.
Isso também pode acontecer se você tiver um arquivo de configuração IRB extra, por exemplo ~/.irbrc
. Se for esse o caso, copie o conteúdo da resposta do LIWP para a configuração extra e ele deve funcionar.