2010-01-14 5 views
13

в ~/.irbrc я эти строки:IRB история не работает

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

и все же, когда я запускаю irb и нажмите стрелку вверх ничего не происходит. также указанный файл истории irb не создается и ничего не записывается в него.

+0

Какая платформа вы используете? Я почти уверен, что установка по умолчанию для OS X не поддерживает поддержку readline из-за проблем с лицензированием. –

+0

То, что у вас там, похоже, работает для меня на дозе, за исключением того, что мне почему-то ударить по двум стрелкам вверх. – rogerdpack

+0

Это решение сработало для меня: http://stackoverflow.com/questions/1752461/history-not-saving –

ответ

11

У меня нет ответа для вас, почему приведенное выше не работает, но я нашел файл, /etc/irbrc в моей системе (OS X - Snow Leopard, Ruby 1.8.7), который обеспечивает работу, постоянная история для меня. Итак, два совета: 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 
+0

несмотря на то, что это похоже на подделку, это работает для меня. Я знаю, что у irb должна быть встроенная функция. Ну, теперь у меня есть история. благодаря! – quinn

+1

Это очень помогло мне. Однако я хотел бы отметить, что я изменил: 'lines.nitems' на ' lines.count' потому что строки.nitems не работают для меня. –

+2

Мне также пришлось добавить: 'require 'irb/ext/save-history'' –

18

История irb работает в 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" 
+1

RVM автоматически добавляет irbrc, который делает это. Нет на Ubuntu из коробки без RVM. –

1

Это известная ошибка с доступным патчем. Простейшее решение перезаписать копи-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 
+1

есть ли сообщение об ошибке? ссылка? Благодарю. – rogerdpack

0

Проверьте, чтобы убедиться, что вы построили рубин с libreadline, как IRB история, кажется, не работает без него.

0

Это может произойти, если у вас есть дополнительный конфигурационный файл irb, например. ~/.irbrc. Если это так, скопируйте контент из ответа liwp на дополнительную конфигурацию, и он должен работать.

Смежные вопросы