Practical Sorcery with irb

Clinton R. Dreisbach, Former Viget

Article Category: #Code

Posted on

When you run irb, the Ruby REPL, it loads the Ruby script at ~/.irbrc, if it exists. My .irbrc file has gotten kind of big lately, and the tricks it adds to my shell are great, so I thought I’d pull it apart and show you the magic inside.

Includes and setup

require 'pp' require 'rubygems' # wirble is amazing require 'wirble' Wirble.init Wirble.colorize IRB.conf[:AUTO_INDENT] = true 

This stuff is all pretty trivial, but incredibly useful. pp is a library that comes with Ruby that prints out nested hashes and arrays in a readable format with indentation. Requiring rubygems up front almost always saves you a line of code. It also lets you require the gem wirble, which gives you cross-session history, colored output, and auto-completion.

IRB.conf[:AUTO_INDENT] = true does exactly what it sounds like: when you write code that would normally have an indent after it, like the beginning of a block, irb indents the next line.

class Object # get all the methods for an object that aren't basic methods from Object def my_methods (methods - Object.instance_methods).sort end end 

When I need to look up methods on an object, I’m always bombarded with a mess of methods on Object. This just gets rid of them for me.

# from def ls %x{ls}.split("\n") end def cd(dir) Dir.chdir(dir) Dir.pwd end def pwd Dir.pwd end 

ls is copied from a person who has the same problem as me: always typing ls inside irb. This just makes that work. I figured as long as I was doing that, I might as well implement the shell commands cd and pwd.

# also from def rl(file_name = nil) if file_name.nil? if !@recent.nil? rl(@recent) else puts "No recent file to reload" end else file_name += '.rb' unless file_name =~ /\.rb/ @recent = file_name load "#{file_name}" end end 

This is some slick magic to help you reload Ruby code inside irb. Normally, you can re-read a file with load "<filename>.rb", which works well, but is a lot to type over and over. rl lets you just type rl "<filename>", and once you’ve called it once, you can just type rl to reload the same file again.

alias p pp alias quit exit 

Finally, I dropped two aliases into .irbrc. pp is so great that I prefer to use it over p, and I have an inability to remember to type exit instead of quit, so I just fixed that.

You can find the entire .irbrc file at If you have any irb tips of your own, let us know in the comments!

Related Articles