Skip to content


Subversion checkout URL

You can clone with
Download ZIP
Enhanced Scala Interaction Mode for Emacs
Emacs Lisp Scala Java VimL Shell
Pull request Compare This branch is 1 commit ahead, 6 commits behind MarcWeber:master.
Fetching latest commit...
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


the ENhanced Scala Interaction Mode for Emacs


  • Highlight errors and warnings in your code buffers.
  • Inspect the type of any expression.
  • Browse packages
  • Completion-on-demand for variables, methods, constructors, etc.
  • Jump to symbol definitions.
  • Automated Refactorings (rename, organize imports, extract method...)
  • Source Formatting
  • Finds sbt,Maven,Ivy dependencies
  • Scala REPL
  • Scala Debugger
  • Embedded sbt shell

Check out this (rather old)video or this one showcasing debugger support

System Requirements

  • Emacs 22 or later.
  • Unix-like OS or Windows. Note that you'll need to use bin/server.bat on windows.
  • Java Runtime
  • Scala 2.8 compatible source and libraries. ENSIME is built against the 2.8 nightly Scala releases.


Quick Start

1) Install scala-mode

ENSIME is designed to compliment scala-mode (or any other scala language mode). scala-mode can be found in the Scala distribution under ./misc/scala-tool-support/emacs/. The rest of the steps assume your scala-mode is installed and working correctly.

2) Install ensime-mode

Download the ENSIME distribution from the github downloads page. Unpack the ENSIME distribution into a directory of your choosing.

Add the following lines to your .emacs file:

;; Load the ensime lisp code...
(add-to-list 'load-path "ENSIME_ROOT/elisp/")
(require 'ensime)

;; This step causes the ensime-mode to be started whenever
;; scala-mode is started for a buffer. You may have to customize this step
;; if you're not using the standard scala mode.
(add-hook 'scala-mode-hook 'ensime-scala-mode-hook)

;; Open .scala file. M-x ensime (once per project)

3) Verify Permissions

Verify that the startup script (usually bin/ has executable permissions.

4) Create Project

In Emacs, execute M-x ensime-config-gen. Follow directions in the mini-buffer to create a .ensime file for your project..

5) Start ENSIME

Execute M-x ensime You only need to do this once per project.

Vim Notes

Not everything has been tested and implemented yet. However the most important features are working. Installation: See bottom

maintainers of this Vim related code: casualjim (github) (started porting the .scala code) MarcWeber (github) (rest)

this works:

  :Ensime                - start the server
  :EnsimeConnectionInfo  - should print some info
  :EnsimeRepl            - read eval print loop (See documentation of vim-addon-async)
  :EnsimeReformatSources - reformat source file and reload it into Vim (vim 7.3 can undo reloading so no care has to be taken)
  :EnsimeDefinition       - goto definition (only if its found in source file for now)
  :EnsimeShowTypeAtCursor - show type under cursor in preview window
  :EnsimeTypecheckAll     - typecheck all (smart sorting: show the errors of the current buffer you're in first)

  (scope, type (member), constructor) completion

- typechecking the files on bufwrite (is this annoying?)

- templates for .ensime files
- ...

Vim installation

Vim plugin dependencies:


I recommend using vim-addon-manager to install ensime and its dependencies. (Follow its documentation - or contact Marc Weber if you have any issues).

You can find the source locations here if you want to install them manually: Many thanks to the main author Aemon Cannon who always assisted this process.

Additionally you have to run sbt dist (in the ensime directory) and compile the .c app in C/ in vim-addon-async.


the inspection view is poor. You can only follow types by :EnsimeInspectTypeById nr you can't debug yet (dito) ... Probably there is much more I've been missing

Something went wrong with that request. Please try again.