2010-11-18 8 views
2

irbは、ファイルにコマンド履歴を書き込むことができますが、irbセッションが終了したときにのみこれを行います。ファイルにirb履歴を頻繁にフラッシュする

私はコマンドの履歴をより頻繁に書きたいと思っています。すべてのコマンド(シェルの履歴のような)に頻繁に書きますが、あまり頻繁である必要はありません。

これには.irbrc設定がありますか?または私はここから...

答えて

4

はきれいな解決策とIRB多くの時間、幸運にハッキングました。代わりに、私はripl、irbの代替をお勧めしたいと思います。デフォルトでは、履歴をより賢明に保存します(たとえControl-Dで突然終了する場合でも)。

あなたは、すべてのコマンドの後に歴史を書きたい場合は、プラグインで拡張することが組み込まれているので、それはRIPLと簡単です:

# add to your ~/.riplrc 
module Ripl::ImmediateHistory 
    # write to history after every eval 
    def eval_input(input) 
    super 
    File.open(history_file, 'a') {|f| f.puts input } 
    end 

    # disable writing to history when ripl exits 
    def write_history; end 
end 
Ripl::Shell.send :include, Ripl::ImmediateHistory 
3

をIRBソースをハックする必要があります:http://blog.nicksieger.com/articles/2006/04/23/tweaking-irb

module Readline 
    module History 
    LOG = "#{ENV['HOME']}/.irb-history" 

    def self.write_log(line) 
     File.open(LOG, 'ab') {|f| f << "#{line} 
"} 
    end 

    def self.start_session_log 
     write_log(" 
# session start: #{Time.now} 

") 
     at_exit { write_log(" 
# session stop: #{Time.now} 
") } 
    end 
    end 

    alias :old_readline :readline 
    def readline(*args) 
    ln = old_readline(*args) 
    begin 
     History.write_log(ln) 
    rescue 
    end 
    ln 
    end 
end 

Readline::History.start_session_log 
関連する問題