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.