[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:002464] irb tips - history



堀之内です.

別に電脳ruby関連に限らないことですが,irb に関する最近お気に入り
の小技を紹介します.(知ってるひとも多いかもしれませんが,私は最
近知ったので.)

irb を使ってると,打ち込んだコマンドのヒストリーを表示したいこと
は多いのではないでしょうか.GNU readline が組み込まれている場合
(多くの場合そうだと思いますが),bash/tcsh みたいに矢印キーで以
前のコマンドを出すことはできますが,まとまったヒストリーを出した
いことも多いでしょう.

そのやり方を知らなかったのですが,Ruby の GNU realine インターフェー
スは,ちゃんとそれができるようになってるのですね(マニュアルに書
いてあります ^^;).ということで,最近 irb のスタートアップファ
イルに,以下のメソッド定義を入れてます.これで history の表示や
ファイルへの出力ができます.history 関数にブロックをつけると,特
定の条件にマッチしたコマンドを取出すなど,いろいろできます.お試
しあれ.

---- ここから irb スタートアップファイルにコピー ---
def history(latest_n=nil)    # block accpeted
  if latest_n
    if !block_given?
      (-latest_n..-1).each{|i| puts Readline::HISTORY[i]}
    else
      (-latest_n..-1).each{|i| yield(Readline::HISTORY[i])}
    end
  else
    if !block_given?
      Readline::HISTORY.each{|s| puts s}
    else
      Readline::HISTORY.each{|s| yield(s)}
    end
  end
  Readline::HISTORY.length
end

def history_save(path='/tmp/irb_ggraph_history_save.rb')
  file = File.open(path,'w')
  history{|s| file.puts(s)}
  file.close
  print "irb history saved in ",path,"\n"
  nil
end
---- ここまで irb スタートアップファイルにコピー ---

使い方は,irb セッション中に以下のように打ち込みます.

history       # ヒストリー表示
history(10)   # 過去10件のヒストリー表示
history{|s| puts s if /require/ =~ s}  # require という文字列を含むのだけ表示
history(10){|s| puts s if /require/ =~ s}  # 同じだが,過去10件より

history_save      # ヒストリーをファイル(上記のデフォルトのもの)にセーブ
history_save('my_history.rb')  # my_history.rb というファイルにセーブ

以上です.

堀之内 武                      horinout@xxxxxxxxxxxxxxxxxx
京都大学生存圏研究所                    phone:0774-38-3812  
611-0011 宇治市五ヶ庄                     fax:0774-31-8463