2010-01-14 21 views
13

en ~/.irbrc tengo estas líneas:historia IRB no trabajar

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

y sin embargo cuando corro irb y pulsa la flecha hacia arriba no pasa nada. también el archivo de historial irb especificado no se está creando y no se registra nada en él.

+0

¿Qué plataforma estás usando? Estoy bastante seguro de que la instalación predeterminada de OS X no tiene soporte de lectura incorporado debido a problemas de licencia. –

+0

Lo que tienes allí parece funcionar para mí en Doze, excepto que tengo que presionar dos flechas hacia arriba por algún motivo. – rogerdpack

+0

Esta solución funcionó para mí: http://stackoverflow.com/questions/1752461/history-not-saving –

Respuesta

11

No tengo una respuesta para usted por qué lo anterior no funciona, pero encontré un archivo, /etc/irbrc en mi sistema (OS X - Snow Leopard, Ruby 1.8.7) que proporciona un funcionamiento, historia persistente para mí. Entonces dos consejos: i) revise su/etc/irbrc (o su equivalente) para asegurarse de que no haya nada allí que pueda interferir con su configuración, y ii) pruebe la configuración a continuación para ver si puede obtener la historia trabajando de esa manera.

# 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 
+0

a pesar de que esto parece una especie de simulación, esto funciona para mí. Sé que irb debe tener esta característica incorporada en algún lado. Oh, bueno, tengo un historial ahora. ¡Gracias! – quinn

+1

Esto fue de gran ayuda para mí. Sin embargo, me gustaría señalar que he cambiado: 'lines.nitems' en ' lines.count' porque lines.nitems no funcionan para mí. –

+2

También tuve que agregar: 'require 'irb/ext/save-history'' –

18

irb history funciona en Debian Linux out of the box. No hay etc/irbrc, ni tengo un ~/.irbrc. Entonces, hmmmm.

This person poner un poco más en su irbrc que usted. ¿Supones que el ARGV.concat podría ser la pieza faltante?

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" 
+1

RVM agrega automáticamente un irbrc que lo hace. No está presente en Ubuntu fuera de la caja sin RVM. –

1

Este es un error conocido con un parche disponible. La solución más fácil es para sobrescribir save-history.rb:

/usr/lib/ruby/1.8/irb/ext/save-history.rb

con una versión fija:

http://pastie.org/513500

o de hacerlo de una sola vez:

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

¿hay algún informe de error en este lugar? ¿un enlace? Gracias. – rogerdpack

0

Compruebe para asegurarse de que usted construyó rubí con libreadline como la historia IRB parece no funcionar sin ella.

0

Esto también puede suceder si tiene un archivo de configuración de irb adicional, p. ~/.irbrc. Si este es el caso, copie el contenido de la respuesta de liwp a la configuración extra y debería funcionar.