     [file version.texi not included]
     [file macros.texi not included]

This manual is for Evil (version VERSION of UPDATED), an extensible vi layer for Emacs.

Copyright © 2011 authors.

     Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.

The Evil team thanks everyone at gmane.emacs.vim-emulation for their feedback and contributions.

Evil
****

This is the manual for Evil, an extensible vi layer for Emacs.

Overview
********

Evil is an extensible vi layer for Emacs.  It emulates the main features of Vim, (Vim is the most popular version of vi, a modal text editor with many implementations.  Vim also adds some functions of its own, like Visual selection and text objects.  For more information, see: http://www.vim.org/) turning Emacs into a modal editor. Like Emacs in general, Evil is extensible in Emacs Lisp.

Installation
============

Evil lives in a Git repository.  To download Evil, do:

     git clone git://gitorious.org/evil/evil.git

Move Evil to ~/.emacs.d/evil.  Then add the following lines to ~/.emacs:

     (add-to-list 'load-path "~/.emacs.d/evil")
     (require 'evil)
     (evil-mode 1)

Evil requires undo-tree.el to provide linear undo and undo branches.  It is available from EmacsWiki. (http://www.emacswiki.org/emacs/UndoTree) (A copy of undo-tree.el is also included in the Git repository.)

Modes and states
================

The next time Emacs is started, it will come up in Normal state, denoted by <N> on the mode line.  This is where the main vi bindings are defined.  Note that you can always disable Normal state with C-z, which switches to an ``Emacs state'' (denoted by <E>) in which vi keys are completely disabled.  Press C-z again to switch back to Normal state.

Evil uses the term state for what is called a ``mode'' in vi, since ``mode'' already has its own meaning in Emacs.  Evil defines a number of states, such as Normal state (<N>), Insert state (<I>), Visual state (<V>), Replace state (<R>), Operator-Pending state (<O>), Motion state (<M>) and Emacs state (<E>).  Each state has its own keymaps and customization variables.

Meanwhile, a mode in Emacs is a set of key bindings for editing a certain sort of text, like emacs-lisp-mode for Emacs Lisp.  Modes may include custom bindings for Evil states.

Settings
********

Evil's behavior can be adjusted by setting various variables. The current values may be inspected by doing M-x customize-group RET evil RET.

To change the value of a variable, add a setq form to ~/.emacs, preferably before Evil is loaded: (Strictly speaking, the order only matters if the variable affects the way Evil is loaded.  This is the case with some of the evil-want- variables.)

     (setq evil-shift-width 8)
     ;; Load Evil
     (require 'evil) ...

Note that if a variable is buffer-local, you must use setq-default instead of setq to change its global value.

 -- Variable: evil-auto-indent
     Whether the current line is indented when entering Insert state. If t (the default), then the line is indented.  If nil, then the line is not indented.  Buffer-local.

 -- Variable: evil-shift-width
     The number of columns a line is shifted by the commands > and <.

 -- Variable: evil-repeat-move-cursor
     If t (the default), then repeating a command with . may change the position of the cursor.  If nil, then the original position is preserved.

 -- Variable: evil-find-skip-newlines
     If t, then f, F, t and T may skip over newlines to find a character.  If nil (the default), then they are restricted to the current line.

 -- Variable: evil-move-cursor-back
     If t (the default), then the cursor moves backwards when exiting Insert state.  If nil, then the cursor does not move.

 -- Variable: evil-want-fine-undo
     If t, then a change-based action like cw may be undone in several steps.  If nil (the default), then it is undone in one step.

 -- Variable: evil-regexp-search
     If t (the default), then / and ? use regular expressions for searching.  If nil, they use plain text.

 -- Variable: evil-search-wrap
     If t (the default), then / and ? wrap the search around the buffer.  If nil, then they stop at buffer boundaries.

 -- Variable: evil-flash-delay
     The number of seconds to flash search matches when pressing n and N.

 -- Variable: evil-want-C-i-jump
     If t (the default), then C-i jumps forwards in the jump list.  If nil, then C-i inserts a tab.

 -- Variable: evil-want-C-u-scroll
     If t, then C-u scrolls the buffer.  If nil (the default), then C-u begins a numeric prefix argument.

The cursor
==========

A state may change the cursor's appearance.  The cursor settings are stored in the variables below, which may contain a cursor type as per the cursor-type variable, a color string as passed to the set-cursor-color function, a zero-argument function for changing the cursor, or a list of the above.  For example, the following changes the cursor in Replace state to a red box:

     (setq evil-replace-state-cursor '("red" box))

If the state does not specify a cursor, evil-default-cursor is used.

 -- Variable: evil-default-cursor
     The default cursor.

 -- Variable: evil-normal-state-cursor
     The cursor for Normal state.

 -- Variable: evil-insert-state-cursor
     The cursor for Insert state.

 -- Variable: evil-visual-state-cursor
     The cursor for Visual state.

 -- Variable: evil-replace-state-cursor
     The cursor for Replace state.

 -- Variable: evil-operator-state-cursor
     The cursor for Operator-Pending state.

 -- Variable: evil-motion-state-cursor
     The cursor for Motion state.

 -- Variable: evil-emacs-state-cursor
     The cursor for Emacs state.

The initial state
=================

By default, a new buffer comes up in Normal state.  This can be changed with the function evil-set-initial-state.

 -- Function: evil-set-initial-state mode state
     Set the initial state for a buffer in which MODE is active to STATE.  MODE should be a major mode such as text-mode, although minor modes work as well.

Keymaps
*******

Evil's key bindings are stored in a number of keymaps.  Each state has a global keymap, where the default key bindings for the state are stored.  For example, the global keymap for Normal state is evil-normal-state-map, and the key bindings in this map are seen in all buffers that are currently in Normal state.

Keymaps are modified with the Emacs function define-key:

     (define-key evil-normal-state-map "w" 'foo)

This binds the key w to the command foo in Normal state.  The file evil-maps.el contains all the key bindings.

 -- Variable: evil-normal-state-map
     The global keymap for Normal state.

 -- Variable: evil-insert-state-map
     The global keymap for Insert state.

 -- Variable: evil-visual-state-map
     The global keymap for Visual state.

 -- Variable: evil-replace-state-map
     The global keymap for Replace state.

 -- Variable: evil-operator-state-map
     The global keymap for Operator-Pending state.

 -- Variable: evil-motion-state-map
     The global keymap for Motion state.

Each state also has a buffer-local keymap, which is specific to the current buffer and has precedence over the global keymap.  These maps may be changed from a mode hook.

 -- Variable: evil-normal-state-local-map
     Buffer-local keymap for Normal state.

 -- Variable: evil-insert-state-local-map
     Buffer-local keymap for Insert state.

 -- Variable: evil-visual-state-local-map
     Buffer-local keymap for Visual state.

 -- Variable: evil-replace-state-local-map
     Buffer-local keymap for Replace state.

 -- Variable: evil-operator-state-local-map
     Buffer-local keymap for Operator-Pending state.

 -- Variable: evil-motion-state-local-map
     Buffer-local keymap for Motion state.

evil-define-key
===============

Finally, Evil provides the function evil-define-key for adding state bindings to a regular keymap.

 -- Function: evil-define-key state keymap key def
     In KEYMAP, create a binding from KEY to DEF in STATE.  STATE is one of normal, insert, visual, replace, operator and motion. The other parameters are like those of define-key.

evil-define-key can be used to augment existing modes with state bindings, as well as create packages for custom bindings.  For example, the following will create a minor mode foo-mode with Normal state bindings for the keys w and e:

     (define-minor-mode foo-mode
       "Foo mode."
       :keymap (make-sparse-keymap))

     (evil-define-key 'normal foo-mode-map "w" 'bar)
     (evil-define-key 'normal foo-mode-map "e" 'baz)

This minor mode can then be enabled in any buffers where the custom bindings are desired:

     (add-hook 'text-mode-hook 'foo-mode) ; enable alongside text-mode

If the minor mode is put into its own file foo.el with a (provide 'foo) statement, it becomes an Emacs package.

Hooks
*****

A hook is a list of functions to execute.  Hooks are modified with the Emacs function add-hook.  Evil provides entry and exit hooks for all of its states.

 -- Variable: evil-normal-state-entry-hook
     Run when entering Normal state.

 -- Variable: evil-normal-state-exit-hook
     Run when exiting Normal state.

 -- Variable: evil-insert-state-entry-hook
     Run when entering Insert state.

 -- Variable: evil-insert-state-exit-hook
     Run when exiting Insert state.

 -- Variable: evil-visual-state-entry-hook
     Run when entering Visual state.

 -- Variable: evil-visual-state-exit-hook
     Run when exiting Visual state.

 -- Variable: evil-replace-state-entry-hook
     Run when entering Replace state.

 -- Variable: evil-replace-state-exit-hook
     Run when exiting Replace state.

 -- Variable: evil-operator-state-entry-hook
     Run when entering Operator-Pending state.

 -- Variable: evil-operator-state-exit-hook
     Run when exiting Operator-Pending state.

 -- Variable: evil-motion-state-entry-hook
     Run when entering Motion state.

 -- Variable: evil-motion-state-exit-hook
     Run when exiting Motion state.

When these hooks are run, the variables evil-next-state and evil-previous-state hold information about the states being switched to and from.

 -- Variable: evil-next-state
     The state being switched to.

 -- Variable: evil-previous-state
     The state being switched from.

Macros
******

Evil is implemented in terms of reusable macros.  Package writers can use these to define new commands.

Motions
=======

A motion is a command which moves the cursor, such as w and e.  Motions are defined with the macro evil-define-motion. Motions not defined in this way should be declared with evil-declare-motion.

 -- Function: evil-declare-motion command
     Declare COMMAND to be a motion.  This ensures that it works properly in Visual state.

 -- Macro: evil-define-motion motion (count args...) doc keyword-args... body...
     Define a movement command MOTION.  A motion can have any number of arguments, but the first argument, if any, has a predefined meaning as the COUNT. It is a positive or negative number, or nil. The argument list is followed by the documentation string DOC, which is followed by optional keyword arguments:

     :type TYPE
          The TYPE determines how the motion works after an operator.  If TYPE is inclusive, then the ending position is included in the motion range.  If TYPE is line, then the range is expanded to linewise positions.  If TYPE is block, then the range is blockwise.  The default is exclusive, which means that the range is used as-is.

     :jump JUMP
          If JUMP is t, then the previous position is stored in the jump list so it can be restored with C-o.  The default is nil.

     The keyword arguments are followed by the BODY, which is where the motion's behavior is defined.  For instance:

          (evil-define-motion foo-forward (count)
            "Move to the right by COUNT characters."
            :type inclusive
            (forward-char (or count 1)))

     For more examples, you can view the source code for any command with C-h k.  For instance, evil-goto-line may be viewed by typing C-h k G and following the file link.

Operators
=========

An operator is a command which acts on the text moved over by a motion, such as c, d and y.  Operators are defined with the macro evil-define-operator.

 -- Macro: evil-define-operator operator (beg end type args...) doc keyword-args... body...
     Define an operator command OPERATOR.  An operator must have at least two or three arguments, which have predefined meanings. BEG is the beginning position, END is the ending position, and TYPE, if given, is the type of the motion range.  The argument list is followed by the documentation string DOC, which is followed by optional keyword arguments:

     :type TYPE
          Make the input range be a certain TYPE.  For example, an operator which only works with whole lines may set TYPE to line.

     :motion MOTION
          Use the motion MOTION instead of reading one from the keyboard. This does not affect the behavior in Visual state, where the selection boundaries are used instead.

     :repeat REPEAT
          If REPEAT is t (the default), then . will repeat the operator.  If REPEAT is nil, then the operator will not be repeated.

     :move-point MOVE-POINT
          If MOVE-POINT is t (the default), then the cursor is positioned at the beginning of the range.  If MOVE-POINT is nil, then the original position is preserved.

     :keep-visual KEEP-VISUAL
          If KEEP-VISUAL is t, then the selection is not disabled when the operator is run in Visual state; it is up to the operator to do this.  The default is nil, which means that Visual state is exited automatically.

     The keyword arguments are followed by the BODY, which is where the operator's actions on BEG and END are defined.  For example, evil-rot13, which is bound to g? and performs ROT13 encryption on the text, may be defined as:

          (evil-define-operator evil-rot13 (beg end)
            "ROT13 encrypt text."
            (rot13-region beg end))

     Pressing g?w will encrypt a word by calling rot13-region on the text moved over by the w motion.

Text objects
============

A text object is a special kind of motion which sets a beginning position as well as an ending position, such as iw and a(. In Visual state, text objects alter both ends of the selection.  Text objects are defined with the macro evil-define-text-object.

 -- Macro: evil-define-text-object object (count args...) doc keyword-args... body...
     Define a text object OBJECT.  The first argument has a predefined meaning as the COUNT: it is a positive or negative number.  The argument list is followed by the documentation string DOC, which is followed by optional keyword arguments:

     :type TYPE
          Use the type TYPE after an operator.  In Visual state, this is the type of the selection.

     :extend-selection EXTEND-SELECTION
          If EXTEND-SELECTION is t (the default), then the text object always enlarges the current selection.  If nil, then the object replaces the selection.

     The keyword arguments are followed by the BODY, which should evaluate to a list (BEG END) of two positions in the buffer.  For example, a text object which selects three characters following the current position could be defined as:

          (evil-define-text-object foo (count)
            "Select three characters."
            (list (point) (+ (point) 3)))

Evil provides several functions which return a list of positions, for use in the definition of a text object.  These functions follow the rule that a positive COUNT selects text after the current position, while a negative COUNT selects text before it.

 -- Function: evil-inner-object-range count forward backward
     Return a text range (BEG END) of COUNT ``inner'' text objects (e.g., iw, is).  FORWARD is a function which moves to the end of an object, and BACKWARD is a function which moves to the beginning.

 -- Function: evil-an-object-range count forward backward
     Return a text range (BEG END) of COUNT text objects with whitespace (e.g., aw, as).  FORWARD is a function which moves to the end of an object, and BACKWARD is a function which moves to the beginning.

 -- Function: evil-paren-range count open close &optional exclusive
     Return a text range (BEG END) of COUNT delimited blocks (e.g., i(, a(). OPEN and CLOSE are characters.  If EXCLUSIVE is non-nil, then the delimiters are excluded from the range.  This function uses Emacs' syntax table and is only applicable for single-character delimiters; use evil-regexp-range to match multiple characters.

 -- Function: evil-regexp-range count open close &optional exclusive
     Return a text range (BEG END) of COUNT delimited blocks (e.g., it, at). OPEN and CLOSE are regular expressions.  If EXCLUSIVE is non-nil, then the delimiters are excluded from the range.

Types
=====

A type is a transformation on a pair of buffer positions.  Evil defines the types exclusive, inclusive, line and block, which are used for motion ranges and Visual selection. Types are defined with the macro evil-define-type.

 -- Macro: evil-define-type type doc keyword-args...
     Define a type TYPE, described by the documentation string DOC.  Then follows keyword arguments:

     :expand EXPAND
          A function which takes two buffer positions and returns a list (BEG END) of expanded positions.

     :contract CONTRACT
          A function which takes two expanded buffer positions and returns a list (BEG END) of unexpanded positions.  Optional.

     :normalize NORMALIZE
          A function which takes two unexpanded buffer positions and returns a list (BEG END) of adjusted positions.  Optional.

     :injective INJECTIVE
          If t (the default), then expansion is one-to-one -- i.e., EXPAND followed by CONTRACT always returns the original positions.  If nil, then several positions may expand to the same (for example, the line type is one-to-many as it expands to the containing lines).

     Further keywords and functions may be specified.  These are understood to be transformations on buffer positions, like EXPAND and CONTRACT.

States
======

States are defined with the macro evil-define-state.  The macro defines the necessary hooks, keymaps and variables for a state, as well as a toggle function evil-STATE-state for entering the state, and a predicate function evil-STATE-state-p which returns t when the state is active, and nil otherwise.

 -- Macro: evil-define-state state doc keyword-args... body...
     Define an Evil state STATE, described by the documentation string DOC.  Then follows optional keyword arguments:

     :tag TAG
          Mode line indicitor, e.g., "<T>".

     :message MESSAGE
          String shown in the echo area.

     :cursor CURSOR
          Cursor specification.

     :enable ENABLE
          List of other modes and states to enable.  A state may enable another state's keymaps in addition to its own.

     This is followed the BODY, which is executed whenever the state is enabled or disabled.  The state's predicate function may be used to distinguish between the two.

Other internals
***************

Command properties
==================

Evil defines command properties to store information about commands, such as whether they should be repeated.  A command property is a :KEYWORD with an associated value, e.g., :repeat nil.

 -- Function: evil-add-command-properties command &rest properties
     Add PROPERTIES to COMMAND.  The properties should be specified as a list of keywords and values:

          (evil-add-command-properties 'my-command :repeat t)

 -- Function: evil-set-command-properties command &rest properties
     Like evil-add-command-properties, but resets all previous properties.

 -- Function: evil-get-command-property command property
     Return the value of a command property.

 -- Macro: evil-define-command command (args...) doc keyword-args... body...
     Define a command with command properties KEYWORD-ARGS.

For setting repeat properties, Evil provides the following functions:

 -- Function: evil-declare-repeat command
     Declare COMMAND to be repeatable.

 -- Function: evil-declare-not-repeat command
     Declare COMMAND to be nonrepeatable.

 -- Function: evil-declare-change-repeat command
     Declare COMMAND to be repeatable by buffer changes rather than keystrokes.

GNU Free Documentation License
******************************

     [file fdl-1.3.texi not included]