It means that you can use Projectile's commands for greping (or acking) files, run tests, switch between projects, etc.
With Projectile Rails you are able to:
- navigate through rails resources (controllers, views, helpers and so on)
- jump to ruby classes and template files
- open log files with
- see rails keywords highlighted
- take advantage of zeus and spring preloaders
It can be a replacement for rinari.
Once you have setup Melpa you can use
package-install command to install Projectile Rails. The package name is
The package name for el-get is
The global mode
Use the package as a global mode:
That will turn on the local
projectile-rails-mode for the buffers which belong to a Rails project (either application or an engine).
Probably you should read Projectile's README on setting up the completion system, caching and indexing files. Although the default settings are quite sensible and you should be ready to go without much tweaking.
The mode's buffers will have the Rails keywords highlighted. To turn it off:
(setq projectile-rails-add-keywords nil)
If you have yas-minor-mode or yas-global-mode enabled and you open a new file it will be filled with a skeleton class. To turn it off:
(setq projectile-rails-expand-snippet nil)
By default the buffer of the
projectile-rails-server-mode is applying the ansi colors. If you find it slow you can disable it with:
(setq projectile-rails-server-mode-ansi-colors nil)
You can customize the way the
zeus commands are invoked. For example if you want to use binstubs:
(setq projectile-rails-vanilla-command "bin/rails" projectile-rails-spring-command "bin/spring" projectile-rails-zeus-command "bin/zeus")
|projectile-rails-find-model||C-c r m||Find a model using
|projectile-rails-find-current-model||C-c r M||Go to a model connected with the current resource.|
|projectile-rails-find-controller||C-c r c||Find a controller using
|projectile-rails-find-current-controller||C-c r C||Go to a controller connected with the current resource.|
|projectile-rails-find-view||C-c r v||Find a template or partial using
|projectile-rails-find-current-view||C-c r V||Go to a view connected with the current resource.|
|projectile-rails-find-helper||C-c r h||Find a helper using
|projectile-rails-find-current-helper||C-c r H||Go to a helper connected with the current resource.|
|projectile-rails-find-lib||C-c r l||Find a lib using
|projectile-rails-find-feature||C-c r f||Find a feature using
|projectile-rails-find-spec||C-c r p||Find a spec using
|projectile-rails-find-current-spec||C-c r P||Go to a spec connected with the current resource.|
|projectile-rails-find-test||C-c r t||Find a test using
|projectile-rails-find-current-test||C-c r T||Go to a test connected with the current resource.|
|projectile-rails-find-migration||C-c r n||Find a migration using
|projectile-rails-find-current-migration||C-c r N||Go to a migration connected with the current resource.|
|projectile-rails-find-fixture||C-c r u||Find a fixture using
|projectile-rails-find-current-fixture||C-c r U||Go to a fixture connected with the current resource.|
|projectile-rails-find-stylesheet||C-c r s||Find a stylesheet using
|projectile-rails-find-log||C-c r o||Find a log file and enable
|projectile-rails-find-initializer||C-c r i||Find an initializer file using
|projectile-rails-find-environment||C-c r e||Find an environment file using
|projectile-rails-find-locale||C-c r a||Find a locale file using
|projectile-rails-find-mailer||C-c r @||Find a mailer file using
|projectile-rails-find-validator||C-c r !||Find a validator file using
|projectile-rails-find-layout||C-c r y||Find a layout file using
|projectile-rails-find-rake-task||C-c r k||Find a rake task file using
|projectile-rails-find-job||C-c r b||Find a job file using
|projectile-rails-dbconsole||C-c r ! b||Run
|projectile-rails-console||C-c r ! c, C-c r r||Run
|projectile-rails-server||C-c r ! s, C-c r R||Run
|projectile-rails-rake||C-c r ! r||Select a rake task to run using
|projectile-rails-generate||C-c r ! g||Run
|projectile-rails-extract-region||C-c r x||Extract the selected region to a partial.|
|projectile-rails-goto-file-at-point||C-c r RET, C-c r g f||Go to a file at point. Depending on the context that might be a constant, template or partial, or a gem.|
|projectile-rails-goto-gemfile||C-c r g g||Go to
|projectile-rails-goto-routes||C-c r g r||Go to
|projectile-rails-goto-schema||C-c r g d||Go to
|projectile-rails-goto-seeds||C-c r g s||Go to
|projectile-rails-goto-spec-helper||C-c r g h||Go to
You might want to create your own keybinding for your favorite commands. For example:
(define-key projectile-rails-mode-map (kbd "s-m") 'projectile-rails-find-model) (define-key projectile-rails-mode-map (kbd "s-c") 'projectile-rails-find-controller) (define-key projectile-rails-mode-map (kbd "s-v") 'projectile-rails-find-view) (define-key projectile-rails-mode-map (kbd "s-RET") 'projectile-rails-goto-file-at-point) (define-key projectile-rails-mode-map (kbd "C-c g") projectile-rails-mode-goto-map)
Defining the keymap prefix
Similar to Projectile Rails there is a variable exposed for defining the prefix for the mode's keymap.
The name of the variable is
To attach the
projectile-rails keymap to the
projectiles keymap one can do:
(setq projectile-rails-keymap-prefix (kbd "C-c p C-r"))
Please note though that in order for this code to work it has to be called before the mode is required/loaded.
There's also integration with discover.el. The key that trigger the menu is
s-r (the "s" stands for Win/Command key).
There's also integration with hydra.
The name of the hydra
hydra-projectile-rails. In order to bind it you can something like this:
(define-key projectile-rails-mode-map (kbd "s-r") 'hydra-projectile-rails/body)
Consider installing other Emacs packages that can help you working specifically with Rails projects.
|erb||web-mode, mmm-mode, rhtml-mode|
Running ruby gems
Some of the Projectile Rails functions run
rails executables. If you are using a ruby version manager you might need to configure your Emacs to play nicely with it.
OS X users might want to look at exec-path-from-shell.
- bundler.el to interact with Bundler.
- rspec-mode to run and edit spec files.
- ruby-test-mode to run and edit test files.
- feature-mode to edit feature files.
- robe to view gems documentation and jump to methods and classes definitions.
- magit to interact with git.
Running pry instead of irb
Pry's paging is not working in emacs. It should be disabled with
Pry.config.pager = false if ENV["INSIDE_EMACS"]. Reference.
projectile-rails-consoleruns rails console using a pre-loader (zeus or spring) and pry's indent correction is enabled then pry will insert some ansi codes that are misinterpreted by
comint-mode. A workaround is to disable the indentation correction with
Pry.config.correct_indent = false. Reference. Issue.
inf-ruby and add this to
your init file:
(add-hook 'after-init-hook 'inf-ruby-switch-setup)
Here's a list of the people that contributed to the projects. Many thanks! :)
Install cask if you haven't already, then:
$ cd /path/to/projectile-rails $ cask
Run all tests with:
$ make test
For all of them to pass you will need the
bundle executable in your path.