2010-01-14 4 views
13

dans ~/.irbrc j'ai ces lignes:histoire RIR ne fonctionne pas

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

et pourtant quand je lance irb et appuyez sur la flèche en haut rien ne se passe. le fichier d'historique irb spécifié n'est pas créé et rien n'y est enregistré.

+0

Quelle plateforme utilisez-vous? Je suis assez sûr que l'installation par défaut d'OS X n'a ​​pas de support readline intégré en raison de problèmes de licence. –

+0

Ce que vous avez là semble fonctionner pour moi sur somnoler, sauf que je dois frapper deux flèches vers le haut pour une raison quelconque. – rogerdpack

+0

Cette solution a fonctionné pour moi: http://stackoverflow.com/questions/1752461/history-not-saving –

Répondre

11

Je ne ai pas de réponse pour vous pourquoi ce qui précède ne fonctionne pas, mais j'ai trouvé un fichier, /etc/irbrc sur mon système (OS X - Snow Leopard, Ruby 1.8.7) qui fournit un travail, histoire persistante pour moi. Donc deux conseils: i) vérifiez votre/etc/irbrc (ou équivalent) pour vous assurer qu'il n'y a rien là-dedans qui pourrait interférer avec vos paramètres, et ii) essayez les paramètres ci-dessous pour voir si vous pouvez obtenir l'histoire fonctionne de cette façon.

# 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

malgré que cela semble un peu comme faire semblant, cela fonctionne pour moi. Je sais que l'IRB doit avoir cette fonctionnalité intégrée quelque part. Eh bien, j'ai une histoire maintenant. Merci! – quinn

+1

Cela m'a beaucoup aidé. Je note toutefois que j'ai changé: 'lines.nitems' dans ' lines.count' parce lines.nitems ne fonctionnent pas pour moi. –

+2

Je devais aussi ajouter: 'require « irb/ext/save-history'' –

18

L'historique irb fonctionne dans Debian Linux dès sa sortie de l'emballage. Il n'y a pas de etc/irbrc, et je n'ai pas de ~/.irbrc. Alors, hmmmm.

This person mettre un peu plus dans son irbrc que vous avez fait. Pensez-vous que l'ARGV.concat pourrait être la pièce manquante?

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 ajoute automatiquement un irbrc qui le fait. Pas présent sur Ubuntu en sortie de boîte sans RVM. –

1

Ceci est un bug connu avec un correctif disponible. solution pour remplacer les plus simples est de sauvegarde history.rb:

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

avec une version fixe:

http://pastie.org/513500

ou de le faire en une seule fois:

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

Y a-t-il un rapport de bogue à ce sujet? un lien? Merci. – rogerdpack

0

Vérifiez pour vous assurer que vous avez construit avec rubis libreadline l'histoire semble fonctionner irb pas sans elle.

0

Cela peut également se produire si vous avez un fichier de configuration IRB supplémentaire, par ex. ~/.irbrc. Si c'est le cas, copiez le contenu de la réponse de liwp à la configuration supplémentaire et cela devrait fonctionner.