Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: b243f8b8c1
Fetching contributors…

Cannot retrieve contributors at this time

103 lines (76 sloc) 3.042 kb


Projectile is a project interaction library for Emacs. Its goal is to provide a nice set of features operating on a project level without introducing external dependencies. For instance - finding project files is done in pure elisp without the use of GNU find.

This library provides easy project management and navigation. The concept of a project is pretty basic - just a folder containing special file. Currently git, mercurial and bazaar repos are considered projects by default. If you want to mark a folder manually as a project just create an empty .projectile file in it. Some of projectile's features:

  • jump to a file in project
  • jump to a project buffer
  • multi-occur in project buffers
  • grep in project
  • regenerate project etags



Just drop projectile.el somewhere in your load-path. I favour the folder ~/.emacs.d/vendor:

(add-to-list 'load-path "~/emacs.d/vendor")

You can enable projectile globally like this:

(require 'projectile)
(projectile-global-mode) ;; to enable in all buffers

To enable projectile only in select modes:

(add-hook 'ruby-mode-hook #'(lambda () (projectile-mode)))


If you're an Emacs 24 user or you have a recent version of package.el you can install projectile from the Marmalade repository.

Emacs Prelude

Projectile is naturally part of the Emacs Prelude. If you're a Prelude user - projectile is already properly configured and ready for action.


Here's a list of the interactive Emacs Lisp functions, provided by projectile:

  • projectile-jump-to-project-file (C-c p j)
  • projectile-grep-in-project (C-c p f)
  • projectile-replace-in-project (C-c p r)
  • projectile-switch-to-buffer (C-c p b)
  • projectile-multi-occur (C-c p o)
  • projectile-regenerate-tags (C-c p t)
  • projectile-invalidate-project-cache (C-c p i)

Helm Integration

Projectile can be integrated with Helm via helm-c-source-projectile source. There is also an example function for calling Helm with the Projectile file source. You can call it like this:

M-x helm-projectile

or even better - bind it to a keybinging like this:

(global-set-key (kbd "C-c h") 'helm-projectile)


  • Traversing the project directory programmatically (instead of using something like GNU find) is not very fast. On the other hand - it's portable. Unlike find-file-in-project, projectile's jump-to-file will work on any OS.
  • To compensate for the lack of speed - a cache is created when a project is traversed. That cache is not automatically updated (presently) so you might want to invalidate it manually from time to time (or disable it completely for small projects).
  • Some operations like find/replace depend (presently) on external utilities such as find and perl.


None at the moment. You could be the first!

Jump to Line
Something went wrong with that request. Please try again.