.irbrcの設定メモ
2011/6/6 16:20更新
一部多分動くだろう、使うかもしれんと適当にやってるのでコピーしても動く保証はいたしません。
active_support入れると色々便利なメソッド追加されるけど、
どこまでがRuby本来のメソッドか分からなくなるのと、
立ち上がりがちょっと遅くなるので初期化では私は入れません。
String#constantizeとか、標準であったようなとかいろんな勘違いを防ぐためにも・・・。
面倒でも必要に応じて、
irb立ち上げ後にrequire "active_support"する。
#! ruby -Ks $KCODE = 'sjis' require 'irb/completion' require 'pp' require 'kconv' require 'rubygems' require 'benchmark' require 'readline' #※1 別記事参考 #require 'win32console' #require 'wirble' #Wirble.init #Wirble.colorize IRB.conf[:SAVE_HISTORY] = 30 #linuxっぽくpwdで現在ディレクトリを表示する def pwd Dir.pwd end #linuxっぽくlsで現在ディレクトリ(または引数ディレクトリ)のファイルを表示する def ls(dir = Dir.pwd) #files = Dir.entries(dir) #p files.join(' ') system(%Q(dir "#{dir}" /W)) end #linuxっぽくllで現在ディレクトリ(または引数ディレクトリ)のファイルを表示する def ll(dir = Dir.pwd) files = Dir.entries(dir) puts files end #linuxっぽくchでディレクトリを移動する #厳密にやるなら移動先がディレクトリかも確認したほうがいいかも def cd(dir = Dir.pwd) Dir.chdir(dir) files = Dir.entries(pwd) puts "[directory]" puts pwd return pwd end #$_が覚えられそうにないので、最後にgetsかreadlineで得た内容を表示する def last_gets return $_ end alias last_readline last_gets #load_pathの表示をする def load_path(sort = false) sort ? $LOAD_PATH.sort : $LOAD_PATH end alias lpath load_path #requireしてるものを表示する def requires(sort = false) sort ? $LOADED_FEATURES.sort : $LOADED_FEATURES end #Windows用。 コンソール表示時にsjisに変換する def puts(*arg) if arg.empty? str = "" else str = arg end arg.is_a?(String) ? str.to_s.tosjis : super(str) end #Windows用。 コンソール表示時にsjisに変換する def print(*arg) if arg.empty? str = "" else str = arg end arg.is_a?(String) ? str.to_s.tosjis : super(str) end #テスト用。 #Symbol、String、Fixnum、Float、Range、Array、Hashのインスタンスを幾つか作成する #スコープの関係でインスタンス変数で作成。 #これを呼ぶだけだと作成した変数がわかりにくいのでself.instance_valiablesをreturnで返す def test_var #Symbol @sym1 = :sym @sym2 = :key @sym3 = :def #Strng @hoge = "hogehoge" @fuga = "fuga" @s1 = "String instance" @s2 = "Not heart mark" @s3 = "マルチバイト文字列" #Fixnum @a = 12345 @b = 11111 #Float @f1 = 1.4 @f2 = 1.6 @f3 = 10.55 @f4 = 0.33 #Range @range = (1..100) #Array @arr1 = [1,nil,"a",:b] @arr2 = @range.to_a #Hash @h = {:k1 => "v1", :k2 => "v2", "ks3" => "v3", "ks4" => "v4", 5 => 5, 6 => 6, nil => 10000} return self.instance_variables.sort end #ファイルの中身表示(DOSコマンド利用) def cat(file_name) system(%Q(type "#{file_name}")) end #ファイルの中身を1画面ごとに表示(DOSコマンド利用) def more(file_name) puts "*"*100 puts("【moreコマンドについてメモ】") puts("[Q] 終了") puts("[space] 次ページ") puts("その他 ggrks") puts "*"*100 puts system(%Q(more "#{file_name}")) end #コンソールクリア(DOSコマンド利用) def cls system("cls") end alias clear_console cls #ファイルコピー(DOSコマンド利用) def cp(file_name, copy_file_path) system(%Q(copy "#{file_name}" "#{copy_file_path}")) end #ディレクトリ階層ごとコピー def cp_dir(dir_name, copy_dir_path) system(%Q(xcopy "#{dir_name}" "#{copy_dir_path}" /s /e)) end #ファイル移動 def fmove(file_name, move_path) system(%Q(move "#{file_name}" "#{move_path}")) end #カレントディレクトリにファイル移動(ファイル取得) def fget(file_name) system(%Q(move "#{file_name}" . )) end #ファイルリネーム(DOSコマンド利用) def frename(old_file_name, new_file_name) system(%Q(rename "#{old_file_name}" "#{new_file_name}")) end #ファイル削除(DOSコマンド利用) def fdelete(file_name) system(%Q(del "#{file_name}")) end alias fremove fdelete #指定したディレクトリの階層構造をツリー形式で表示する def tree(dir_name = pwd, file_output = false) if file_output system(%Q(tree "#{dir_name}" /a)) else system(%Q(tree "#{dir_name}" /a /f)) end end #ディレクトリ作成(DOSコマンド利用) #怖いのでディレクトリ階層丸ごと消すdeltreeは用意しない。 def mkdir(dir_name) system(%Q(mkdir "#{dir_name}")) end #EmEditorでファイルを開く(環境変数のPATHを通す必要あり) def emeditor(file_name) system(%Q(emeditor "#{file_name}")) end #メモ帳でファイルを開く def notepad(file_name) system(%Q(notepad "#{file_name}")) end #ファイル開く(ダブルクリック実行と同じ) def fopen(file_name) system(%Q(open "#{file_name}")) end #簡易ベンチマーク測定 #bench(親times回数, 実際に実行する子times回数){ 実行処理 } #bench{ 実行処理 }でOK def bench(bench_count = 5, exe_count = 10000) puts Benchmark::CAPTION bench_count.times do puts Benchmark.measure { exe_count.times { yield } } end end #区切り線を出すための文字列を返す。 puts hrとかで利用 def hr(count = 80, str = "-", between_blank = true) hr_str = "" hr_str << "\n" if between_blank hr_str << str.to_s * count hr_str << "\n\n" if between_blank end #特定行数の空行を入れる def blank_line(line_count = 1) line_count.times{ puts } end #irbで現在のself・self.classや、そのクラスに定義されている変数・定数などの情報を出す def self_info #実行するメソッド表示 def info_title_output(call_method) puts "*** #{call_method} ***" end #メソッド実行、結果表示 def result_output(call_method) print "#=> " p eval(call_method) end @self_class = self.is_a?(Class) ? self : self.class #call_methods #ここでlocal_variables.sortすると、メソッド内スコープでのローカル変数になるので入れない %w(self self.class @self_class.ancestors requires @self_class.included_modules @self_class.constants.sort @self_class.class_variables.sort self.instance_variables.sort ).each do |call_method| info_title_output(call_method) result_output(call_method) blank_line(2) end #スコープ違う、irb起動後のmainスコープの中のローカル変数を表示したいけれど #それには無理がありそうなので、 #"local_variables"って文字列を返して、 #eval(self_info)とすればmainスコープのローカル変数も最後に表示するようにした。 #あんまりスマートじゃないけど('・ω・`) #return nil return "local_variables.sort" end #methods.grep.sortの略でmgで定義 #[].mg(/^o/)とかで走るようにする。 class Object def mg(grep_rege = //) pp self.methods.grep(grep_rege).sort end end #10回くらいRand発生させてばらつきを見るだけ #optionは #:seed srand(seed)を与える場合。基本は数字。文字列は文字コードの数字として与える。数値・文字以外だとsrand使わない #:count 何回表示させるか(デフォルト10回) #:sleep_time 1回の表示に何秒間隔を空けるか(デフォルト0.6秒) def rand_test(rand_arg = nil, options = {}) seed = options.has_key?(:seed) ? options[:seed] : nil count = options.has_key?(:count) ? options[:count].to_i : 10 sleep_time = options.has_key?(:sleep_time) ? options[:sleep_time].to_f : 0.6 if seed.is_a?(Fixnum) || seed.is_a?(String) if seed.class == Fixnum srand(seed) else #文字コードの数字を連結してseedに与える srand(seed.split(//).map{|str| str[0]}.join.to_i) #injectで文字コードの数字合計をseedに与える場合 #srand(seed.split(//).map{|str| str[0]}.inject(0){|sum,x| sum + x}) end else seed = nil end count.times do p rand(rand_arg) sleep(sleep_time) end end
自分のirb設定。
※1
そのままコピーすると、おそらくこの部分↓
require 'readline'
でエラー(LoadError)がでると思います。
こちらにつきましては
「irbの長い文字列入力時、backspace等でのバグ対処法」
http://d.hatena.ne.jp/fre_oik/20110606/1307336153
と、別途記事にして書いてあります。
Windowsコマンドプロンプトでirbを動作させた場合(のみ?)の怪しい挙動の対処です。
その他について。
WindowsのコマンドプロンプトだとUTF8等設定を変えないと、
ShiftJIS以外のマルチバイト文字が文字化けしちゃう。
UTF-8の対応が若干面倒なのと、参考記事を幾つか見ながらやって自分がうまく出来なかったので、ダサいと言われようとShiftJISで対応することにしている。
ので、
#! ruby -Ks
$KCODDE
でShiftJISの表示対応。
あとはlinuxっぽく使えるように、
pwd, ls, ll, cdを定義。
$_なんて覚えらんねーよと半ば逆ギレ気味に、
last_getsとlast_readlineを定義。
$LOAD_PATHもたまに忘れるから、
load_pathで呼べるようにしておく。
$LOADED_FEATURESなんてものをさっき知ったので、
requiresで呼べるようにしておく。
後は自分のテスト用にいろいろ変数を初期化するための
test_variableを用意している。
更新した分は追記しない!