We'll show here how to configure Emacs as a productive environment for Ruby and Rails development.

Be also aware that Starter Kits like Prelude have many stuff pre-installed, and that Spacemacs has a Ruby layer.

ruby-mode

ruby-mode provides basic font-locking, indentation and navigation support for Ruby source code. It was first included in Emacs 23 (previously it was a third party package, maintained by Ruby's developers). While ruby-mode is fairly barebone package it could be augmented by a multitude of minor modes (see below).

ruby-end - auto insert end statements

Just install ruby-end (in ELPA). Now ruby-end-mode will start alongside ruby-mode.

Ruby on Rails

Rinari (in melpa) stands for Rinari Is Not A Rails IDE. It is an Emacs minor mode for Rails that is actively maintained.

Rinari features:

for 'jumps' between Model, View, Controller and their RSpec examples and Test Unit tests,

as well as Cucumber steps and features.

running of a console session with full Rails application loaded for interactive use,

SQL console,

starting of the web server (rails server).

For a list of keybindings, see Rinari. The official documentation is alright, but for best information check out the source.

Projectile-rails - navigation, rake tasks, console, etc

Projectile is a popular project management system. It allows to easily search files under a project, switch buffers pertaining to that project, switch to tests files, search in project (with rgrep , ag ,…), and more. Now we can add Rails support with projectile-rails (in melpa).

With Projectile Rails you are able to:

navigate through rails resources (controllers, views, helpers and so on)

jump to ruby classes and template files

run rake

run rails console

run rails dbconsole

run rails generate

run rails server

open log files with auto-revert-mode on

see rails keywords highlighted

take advantage of zeus and spring preloaders

It can be a replacement for rinari.

Intelligent code navigation and completion with Robe

Robe (in MELPA) is a code assistance tool that uses a Ruby REPL subprocess with your application or gem code loaded, to provide information about loaded classes and modules, and where each method is defined.

To load it with ruby-mode:

(require 'robe) (add-hook 'ruby-mode-hook 'robe-mode)

If you are using rvm you may want to instruct robe to auto-trigger rvm-activate-corresponding-ruby :

(defadvice inf-ruby-console-auto (before activate-rvm-for-robe activate) (rvm-activate-corresponding-ruby))

Code navigation

By default bound to M-. (robe-jump). It can be used to jump to definitions of various classes and methods.

Code completion

For intelligent completion robe can be integrated with company mode. Company mode is a modern and modular completion system for emacs which accepts a multitude of pluggable back-ends and front-ends to provide rich completions on the fly. Robe provides a backend to the completion in form of company-robe. This can be configured as follows :

(global-company-mode t) (push 'company-robe company-backends)

Now all you have to do is hit robe-start when you navigate into your project. After that at any point if you trigger company-robe you should be greeted with an intellisense like method definitions.

Completion will start automatically after you type a few letters. Use M-n, M-p, <tab> and <return> to complete. Search through the completions with C-s, C-r and C-o. Even the documentations are available right from the editor (Press F1 at any menu entry).





Syntax checking: flymake

See Flymake, and install flymake-ruby (in melpa).

To make sure it is started along with ruby mode, add:

(require 'flymake-ruby) (add-hook 'ruby-mode-hook 'flymake-ruby-load)

Ruby shell inside Emacs

inf-ruby provides a REPL buffer connected to a Ruby subprocess. It is available through the package manager. To bind to a shortcut, do something like:

(global-set-key (kbd "C-c r r") 'inf-ruby)

See also: Shell

RVM integration

Pick rvm.el. Once installed you will just have to call rvm-activate-corresponding-ruby and rvm.el will automatically pick up your ruby version and gemset from your .rvmrc file.

For a keybinding:

(global-set-key (kbd "C-c r a") 'rvm-activate-corresponding-ruby)

See also

You might want to check the following pages to make the most out of Emacs:

Git, Github and Gitlab

Buffer_management, code Folding,

how Emacs helps in Discoverability,

Compilation and Shell

ruby-mode at Ruby's Subversion repo