2010-01-14 9 views
13

in ~/.irbrc ho queste righe:storia IRB non funziona

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

eppure quando ho eseguito irb e ha colpito la freccia non succede nulla. anche il file di cronologia irb specificato non viene creato e non viene registrato nulla.

+0

Che piattaforma stai usando? Sono abbastanza sicuro che l'installazione predefinita di OS X non ha il supporto di readline integrato a causa di problemi di licenza. –

+0

Quello che hai sembra funzionare per me su doze, tranne che devo colpire due frecce in alto per qualche motivo. – rogerdpack

+0

Questa soluzione ha funzionato per me: http://stackoverflow.com/questions/1752461/history-not-saving –

risposta

11

Non ho una risposta per voi perché quanto sopra non funziona, ma ho trovato un file, /etc/irbrc sul mio sistema (OS X - Snow Leopard, Ruby 1.8.7) che fornisce un funzionamento, storia persistente per me. Quindi due consigli: i) controlla il tuo/etc/irbrc (o equivalente) per assicurarti che non ci sia nulla che possa interferire con le tue impostazioni, e ii) prova le impostazioni seguenti per vedere se riesci ad ottenere la storia funziona in quel modo.

# 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

nonostante ciò sembra un po 'come fingere, questo funziona per me. So che IRB deve avere questa funzione integrata da qualche parte. Oh bene, ho una storia ora. Grazie! – quinn

+1

Questo è stato di grande aiuto per me. Vorrei tuttavia notare che ho cambiato: 'lines.nitems' in ' lines.count' perché lines.nitems non funziona per me. –

+2

Ho anche aggiunto: 'richiede 'irb/ext/save-history'' –

18

La cronologia irb funziona in Debian Linux fuori dalla scatola. Non c'è etc/irbrc, né ho un ~/.irbrc. Quindi, hmmmm.

This person mettere un po 'di più nel suo irbrc di quello che hai fatto. Supponi che ARGV.concat potrebbe essere il pezzo mancante?

+1

RVM aggiunge automaticamente un irbrc che lo fa. Non presente su Ubuntu out of box senza RVM. –

1

Questo è un bug noto con una patch disponibile. soluzione più semplice è quella di sovrascrivere salvataggio-history.rb:

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

con una versione fissa:

http://pastie.org/513500

o di farlo in una volta sola:

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

c'è un bug report su questo ovunque? un collegamento? Grazie. – rogerdpack

0

Controllare per assicurarsi che hai costruito rubino con libreadline come la storia IRB sembra non funzionare senza di essa.

0

Ciò può verificarsi anche se si dispone di un file di configurazione irb aggiuntivo, ad es. ~/.irbrc. In tal caso, copiare il contenuto dalla risposta di liwp alla configurazione aggiuntiva e dovrebbe funzionare.