2010-01-14 28 views
13

trong ~/.irbrc tôi có những dòng này:lịch sử IRB không làm việc

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

nhưng khi tôi chạy irb và nhấn mũi tên lên có gì xảy ra. cũng tập tin lịch sử irb được chỉ định không được tạo ra và không có gì được ghi vào nó.

+0

Bạn đang sử dụng nền tảng nào? Tôi khá chắc chắn rằng cài đặt mặc định OS X không có hỗ trợ readline được xây dựng do vấn đề cấp phép. –

+0

Những gì bạn có ở đó xuất hiện để làm việc cho tôi trên doze, ngoại trừ việc tôi phải nhấn hai mũi tên lên vì một lý do nào đó. – rogerdpack

+0

Giải pháp này làm việc cho tôi: http://stackoverflow.com/questions/1752461/history-not-saving –

Trả lời

11

Tôi không có câu trả lời cho bạn tại sao những điều trên không hiệu quả, nhưng tôi đã tìm thấy tệp, /etc/irbrc trên hệ thống của mình (OS X - Snow Leopard, Ruby 1.8.7) lịch sử liên tục cho tôi. Vì vậy, hai lời khuyên: i) kiểm tra/etc/irbrc (hoặc tương đương) để đảm bảo rằng không có bất kỳ thứ gì trong đó có thể ảnh hưởng đến cài đặt của bạn và ii) thử các cài đặt bên dưới để xem bạn có thể nhận được không lịch sử làm việc theo cách đó.

# 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

mặc dù điều này có vẻ giống như giả mạo nó, điều này làm việc cho tôi. Tôi biết irb phải có tính năng này được xây dựng ở đâu đó. Ồ, tôi có một lịch sử bây giờ. cảm ơn! – quinn

+1

Đây là một trợ giúp tuyệt vời cho tôi. Tuy nhiên, tôi xin lưu ý rằng tôi đã thay đổi: 'lines.nitems' thành ' lines.count' vì lines.nitems không hoạt động đối với tôi. –

+2

Tôi cũng phải thêm: 'yêu cầu' irb/ext/save-history'' –

18

Lịch sử IRB hoạt động trong Debian Linux ngoài hộp. Không có etc/irbrc, tôi cũng không có ~/.irbrc. Vì vậy, hmmmm.

This person đặt nhiều hơn một chút trong phần mềm của mình hơn bạn đã làm. Bạn có cho rằng ARGV.concat có thể là phần bị thiếu không?

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 tự động thêm một irbrc làm điều đó. Không xuất hiện trên Ubuntu không có RVM. –

1

Đây là lỗi đã biết với bản vá có sẵn. Giải pháp đơn giản nhất là để ghi đè tiết kiệm-history.rb:

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

với một phiên bản cố định:

http://pastie.org/513500

hoặc để làm điều đó chỉ trong một bước:

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

có báo cáo lỗi về điều này ở đâu không? đường dẫn? Cảm ơn. – rogerdpack

0

Kiểm tra để chắc chắn rằng bạn xây dựng ruby ​​với libreadline như lịch sử IRB dường như không làm việc mà không có nó.

0

Điều này cũng có thể xảy ra nếu bạn có tệp cấu hình bổ sung irb, ví dụ: ~/.irbrc. Nếu trường hợp này xảy ra, hãy sao chép nội dung từ câu trả lời của liwp sang cấu hình phụ và nó sẽ hoạt động.

Các vấn đề liên quan