With my Emacs config files better organized, it’s time now to turn my attention to improving my experience editing Ruby files. First of all, I want to be able to quickly and easily drop into an IRB session from the code I’m working on.
First, I grab the
rvm.el package from GitHub. This package is also available via ELPA, but the version in the archives is a little older and doesn’t work as well. I want the latest.
git submodule add https://github.com/senny/rvm.el.git elisp/external/rvm.el
I open up the
rvm.el file, and byte-compile it with
M-x byte-compile-file. Then I generate autoloads for it with
M-x update-file-autoloads. I tell emacs to save the generated autoloads file as
~/.emacs24.d/init.d/rvm-loaddefs.el, so it will be picked up by my init-loading loop.
I integrate RVM into my Ruby editing experience by adding a new hook to
(add-hook 'ruby-mode-hook (lambda () (rvm-activate-corresponding-ruby)))
Now whenever I open a Ruby file, Emacs looks for the corresponding
.rvmrc (if any) and reconfigures the environment to ensure that the appropriate Ruby executable will be used.
That done, I alter my “required packages” list to include the
inf-ruby package, and then re-evaluate the code which installs the package list. Inf-Ruby stands for “Inferior Ruby”; it is a package which makes it possible to run an IRB session inside an Emacs buffer.
(setq abg-required-packages (list 'xml-rpc 'magit 'gh 'inf-ruby)) ; ... (dolist (package abg-required-packages) (when (not (package-installed-p package)) (package-refresh-contents) (package-install package)))
Now when I edit a Ruby file, at any time I can hit
C-x C-s to drop into an IRB buffer and evaluate live Ruby code.
rvm.el ensures that it is the correct Ruby version and gemset for the current project.
inf-ruby has lots of handy keybindings for evaluating bits of Ruby files within the IRB buffer, so it’s easy to make a change to the code, send the new code to the
inf-ruby buffer, and then play with the updated code without restarting the IRB session.
Nice article. I’ve switched to MacVim for most of my programming work, but I miss emacs. However, I do like Vi’s keybinding better. Do you use Viper-mode?
Have you tried el-get? It installs most packages from source control and takes care of byte compiling/updating etc for you. Also you don’t have to add any submodules.
I’d heard of it. It’s now on my list of topics to look into for this series, thank you!