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 ruby-mode-hook
:
(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.
Link: https://github.com/dimitri/el-get
I’d heard of it. It’s now on my list of topics to look into for this series, thank you!