evil
The extensible vi layer for Emacs.
Evil is an Emacs package that brings Vim's modal keyboard editing style into Emacs, letting you use Vim navigation and commands while keeping all Emacs features and packages you already rely on.
Evil is a package for Emacs that brings Vim-style keyboard editing into the Emacs text editor. Emacs and Vim are two of the oldest and most established text editors used by programmers. They have very different philosophies: Vim is known for its modal editing approach, where the keyboard behaves differently depending on which mode you are in (navigating text vs. typing text vs. making selections), while Emacs has a different keyboard shortcut system with heavy use of modifier keys like Control and Alt.
Evil (short for Extensible VI Layer) lets Emacs users adopt Vim's modal editing style without giving up the Emacs environment they already know. This matters because many people prefer Vim's navigation and editing commands for speed and efficiency, but also want access to Emacs features, packages, and customizations that are difficult or impossible to replicate in standard Vim. Evil bridges the two by running inside Emacs and intercepting keystrokes to behave the way Vim would.
The package replicates the main Vim features: normal mode, insert mode, visual mode, the command-line, text objects, motions, operators, marks, registers, and macros. It also provides an extension system so developers can add custom Vim-style behaviors specific to their workflow or the Emacs packages they use.
Installing Evil is done through Emacs's built-in package manager, with a few lines of configuration added to the Emacs startup file. It requires Emacs version 24.1 or later. Documentation is available online and as downloadable PDF and EPUB files. The project has a mailing list and an IRC channel for community discussion.
Where it fits
- Use Vim-style hjkl navigation and modal editing inside Emacs without switching to a different editor
- Configure Vim text objects, macros, and registers to work seamlessly in your existing Emacs setup
- Add custom Vim-like keyboard behaviors for Emacs packages you already use via Evil's extension system