Using Emacs for Rails development: The perfect setup
Lately, I’ve started digging more and more into Rails, preparing for the start of a Rails powered project. Although there are some IDEs offering decent Rails support (namely RubyMine, NetBeans, Komodo and Aptana Studio) I have always preferred the comfort of Emacs for various reasons. So naturally I embarked on a quest to setup a suitable environment for Rails development in Emacs. After a couple of days of searching and evaluating possible solutions I finally set up a worthy environment. It consists of a couple of components:
As you probably have guessed by now ruby-mode provides support for
editing ruby source files. The mode is pretty feature complete and
under active development, headed by none other than Matz (Ruby’s
creator) himself. I can only assume that Matz is an Emacs user
himself. You can get it from the ruby svn repository if you’re using a
version of Emacs older than Emacs 23 (it’s built-in there).
inf-ruby is a mode that spawns and inferior ruby process (e.g. an irb shell)
to which you can directly send code from the ruby buffer you’re
currently editing. For instance - you can define a function and while
your cursor is inside it you can press C-M-x - the function definition
will be evaluated in irb automatically and you can test it there. This
is extremely handy!
autopair-mode provides auto insertion of closing braces, quotes,
ends, etc. It’s a much more generic version of the ruby-electric mode
that used to do similar tasks, but just in Ruby buffers.
Although many people recommend adding pabbrev (a mode which
provides auto-completion) to the setup, I don’t recommend it – I find
the mode mostly annoying and stick to the old school dumb
auto-completion with M-/. If you’re shopping for auto-completion,
however, a much better and smarter choice would be a
RSense.
yasnippet is a package that offers dynamically expandable code
snippets(template), quite similar to ones in TextMate. It’s very easy
to add your very own snippets if you wish to.
nxhtml-mode is a pretty comprehensive package for web development in
general. We need it for its excellent support for erb
templates (.rhtml, .erb.html) and of course xhtml and css. Lately it’s
not been as actively developed as it used to be, but it’s still a
pretty good mode. Alternatively you can use
Haml and
SASS and forget about
nxhtml. Both have pretty decent Emacs modes available.
rinari is a mode for Rails development – it contains rich
functionality such as the ability to easily navigate between models,
views and controllers in a Rails apfplication amongst other
features. Instructions how to set up rinari together with nxhtml-mode
can be found on rinari’s home page.
It’s always a good idea to add ecb (the Emacs code browser) to the mix, though this is entirely optional.
A lot of the stuff I discussed here are part of the
Emacs Prelude that I
develop and maintain. I urge you to use the Emacs Prelude as a starting point to
develop your very own customized version of Emacs. Prelude comes with a
few ruby-mode customizations, yari (ri integration for Emacs), haml and
sass modes, autopair, yaml-mode, yasnippet, css-mode, ecb and a lot of
other goodies (Projectile being one of my favourites).
I hope you’ll enjoy this setup and that it will help boost your Rails productivity in Emacs.