diff options
Diffstat (limited to 'elpa/evil-1.15.0/doc/build/texinfo/evil.texi')
-rw-r--r-- | elpa/evil-1.15.0/doc/build/texinfo/evil.texi | 2271 |
1 files changed, 2271 insertions, 0 deletions
diff --git a/elpa/evil-1.15.0/doc/build/texinfo/evil.texi b/elpa/evil-1.15.0/doc/build/texinfo/evil.texi new file mode 100644 index 0000000..3344e5f --- /dev/null +++ b/elpa/evil-1.15.0/doc/build/texinfo/evil.texi @@ -0,0 +1,2271 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename evil.info +@documentencoding UTF-8 +@ifinfo +@*Generated by Sphinx 4.3.2.@* +@end ifinfo +@settitle Evil documentation +@defindex ge +@paragraphindent 0 +@exampleindent 4 +@finalout +@dircategory Emacs +@direntry +* evil: (evil.info). Extensible vi layer for Emacs +@end direntry + +@definfoenclose strong,`,' +@definfoenclose emph,`,' +@c %**end of header + +@copying +@quotation +Evil 1.15.0, Jan 07, 2022 + +Eivind Fonn, Frank Fischer, Vegard Øye + +Copyright @copyright{} 2011-2019, Eivind Fonn, Frank Fischer, Vegard Øye +@end quotation + +@end copying + +@titlepage +@title Evil documentation +@insertcopying +@end titlepage +@contents + +@c %** start of user preamble + +@c %** end of user preamble + +@ifnottex +@node Top +@top Evil documentation +@insertcopying +@end ifnottex + +@c %**start of body +@anchor{index doc}@anchor{44} +@c Evil documentation master file, created by +@c sphinx-quickstart on Thu Dec 12 10:34:49 2019. +@c You can adapt this file completely to your liking, but it should at least +@c contain the root `toctree` directive. + +@menu +* Overview:: +* Settings:: +* Keymaps:: +* Hooks:: +* Extension:: +* Frequently Asked Questions:: +* Internals:: +* The GNU Free Documentation License:: +* Emacs lisp functions and variables:: + +@detailmenu + --- The Detailed Node Listing --- + +Overview + +* Installation via package.el: Installation via package el. +* Manual installation:: +* Modes and states:: + +Settings + +* The initial state:: +* Keybindings and other behaviour:: +* Search:: +* Indentation:: +* Cursor movement:: +* Cursor display:: +* Window management:: +* Parenthesis highlighting:: +* Miscellaneous:: + +Keymaps + +* evil-define-key:: +* Leader keys:: + +Extension + +* Motions:: +* Operators:: +* Text objects:: +* Range types:: +* States:: + +Frequently Asked Questions + +* Problems with the escape key in the terminal:: +* Underscore is not a word character:: + +Internals + +* Command properties:: + +@end detailmenu +@end menu + +@node Overview,Settings,Top,Top +@anchor{overview doc}@anchor{45}@anchor{overview evil}@anchor{46}@anchor{overview overview}@anchor{47} +@chapter Overview + + +Evil is an extensible vi layer for Emacs. It emulates the main +features of Vim, @footnote{@w{(1)} +Vim is the most popular version of @emph{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 @uref{https://vim.org,the official Vim website}. +} turning Emacs into a modal editor. Like Emacs in +general, Evil is extensible in Emacs Lisp. + +@menu +* Installation via package.el: Installation via package el. +* Manual installation:: +* Modes and states:: + +@end menu + +@node Installation via package el,Manual installation,,Overview +@anchor{overview installation-via-package-el}@anchor{48} +@section Installation via package.el + + +Evil is available as a package from MELPA stable, MELPA unstable and +NonGNU ELPA. This is the recommended way of installing Evil. + +To set up @cite{package.el} to work with one of the MELPA repositories, you +can follow the instructions on melpa.org@footnote{https://melpa.org/#/getting-started}. + +Alternatively you can use NonGNU ELPA. It is part of the default +package archives as of Emacs 28. For older Emacs versions you’ll need +to add it yourself: + +@example +(add-to-list 'package-archives + (cons "nongnu" (format "http%s://elpa.nongnu.org/nongnu/" + (if (gnutls-available-p) "s" "")))) +@end example + +Once that is done, you can execute the following commands: + +@example +M-x package-refresh-contents +M-x package-install RET evil RET +@end example + +Finally, add the following lines to your Emacs init file: + +@example +(require 'evil) +(evil-mode 1) +@end example + +@node Manual installation,Modes and states,Installation via package el,Overview +@anchor{overview manual-installation}@anchor{49} +@section Manual installation + + +First, install @cite{goto-chg} and @cite{cl-lib}. If you have an Emacs version +of 24.3 or newer, you should already have @cite{cl-lib}. + +Evil lives in a git repository. To download Evil, do: + +@example +git clone --depth 1 https://github.com/emacs-evil/evil.git +@end example + +Then add the following lines to your Emacs init file: + +@example +(add-to-list 'load-path "path/to/evil") +(require 'evil) +(evil-mode 1) +@end example + +Ensure that your replace @code{path/to/evil} with the actual path to +where you cloned Evil. + +@node Modes and states,,Manual installation,Overview +@anchor{overview modes-and-states}@anchor{4a} +@section Modes and states + + +The next time Emacs is started, it will come up in @emph{normal state}, +denoted by @code{<N>} in the mode line. This is where the main vi +bindings are defined. Note that you can always disable normal state +with @code{C-z}, which switches to an “Emacs state” (denoted by +@code{<E>}) in which vi keys are completely disabled. Press @code{C-z} +again to switch back to normal state. + + +@table @asis + +@item state + +Evil uses the term @emph{state} for what is called a “mode” in regular vi +usage, because @emph{modes} are understood in Emacs terms to mean +something else. +@end table + +Evil defines a number of states by default: + + +@table @asis + +@item normal state (@code{<N>}) + +This is the default “resting state” of Evil, in which the main body +of vi bindings are defined. + +@item insert state (@code{<I>}) + +This is the state for insertion of text, where non-modified keys +will insert the corresponding character in the buffer. + +@item visual state (@code{<V>}) + +A state for selecting text regions. Motions are available for +modifying the selected region, and operators are available for +acting on it. + +@item replace state (@code{<R>}) + +A special state mostly similar to insert state, except it replaces +text instead of inserting. + +@item operator-pending state (@code{<O>}) + +A special state entered after launching an operator, but before +specifying the corresponding motion or text object. + +@item motion state (@code{<M>}) + +A special state useful for buffers that are read-only, where motions +are available but editing operations are not. + +@item Emacs state (@code{<E>}) + +A state that as closely as possible mimics default Emacs behaviour, +by eliminating all vi bindings, except for @code{C-z}, to re-enter +normal state. +@end table + +@node Settings,Keymaps,Overview,Top +@anchor{settings doc}@anchor{4b}@anchor{settings settings}@anchor{4c} +@chapter Settings + + +Evil’s behaviour can be adjusted by setting some variables. The list +of all available variables and their current values can be inspected +by doing: + +@example +M-x customize-group RET evil RET +@end example + +To change the value of a variable, you can use this interface, or add +a @code{setq} form to your Emacs init file, preferably before Evil is +loaded. @footnote{@w{(1)} +Strictly speaking, the order only matters if the variable +affects the way Evil is loaded. This is the case with some +variables. +} + +@example +(setq evil-shift-width 0) +;; Load Evil +(require 'evil) +@end example + +What follows is a non-exhaustive list of the most relevant +customization options. + +@menu +* The initial state:: +* Keybindings and other behaviour:: +* Search:: +* Indentation:: +* Cursor movement:: +* Cursor display:: +* Window management:: +* Parenthesis highlighting:: +* Miscellaneous:: + +@end menu + +@node The initial state,Keybindings and other behaviour,,Settings +@anchor{settings the-initial-state}@anchor{4d} +@section The initial state + + +The initial state of a buffer is determined by its major mode. Evil +maintains an association between major modes and their corresponding +states, which is most easily modified using the function +@ref{30,,evil-set-initial-state}. + +@anchor{settings elispobj-evil-set-initial-state}@anchor{30} +@deffn {Emacs Lisp Autofunction} (evil@w{-}set@w{-}initial@w{-}state MODE STATE) + +Set the initial state for major mode @emph{MODE} to @emph{STATE}. +This is the state the buffer comes up in. +@end deffn + +If no state can be found, Evil uses the default initial state. + +@anchor{settings elispobj-evil-default-state}@anchor{d} +@deffn {Emacs Lisp Autovariable} evil@w{-}default@w{-}state + +The default Evil state. +This is the state a buffer starts in when it is not otherwise +configured (see @ref{30,,evil-set-initial-state} and +@ref{5,,evil-buffer-regexps}). The value may be one of @code{normal}, +@code{insert}, @code{visual}, @code{replace}, @code{operator}, @code{motion} and @code{emacs}. + +Default: @code{normal} +@end deffn + +Alternatively, it is possible to select the initial state based on the +buffer @emph{name} rather than its major mode. This is checked first, so +it takes precedence over the other methods for setting the state. + +@anchor{settings elispobj-evil-buffer-regexps}@anchor{5} +@deffn {Emacs Lisp Autovariable} evil@w{-}buffer@w{-}regexps + +Regular expressions determining the initial state for a buffer. +Entries have the form @code{(REGEXP . STATE)}, where @emph{REGEXP} is a regular +expression matching the buffer’s name and @emph{STATE} is one of @code{normal}, +@code{insert}, @code{visual}, @code{replace}, @code{operator}, @code{motion}, @code{emacs} and +@code{nil}. If @emph{STATE} is @code{nil}, Evil is disabled in the buffer. + +Default: @code{(("^ \\*load\\*"))} +@end deffn + +@node Keybindings and other behaviour,Search,The initial state,Settings +@anchor{settings keybindings-and-other-behaviour}@anchor{4e} +@section Keybindings and other behaviour + + +Evil comes with a rich system for modifying its key bindings +@ref{4f,,Keymaps}. For the most common tweaks, the following +variables are available. + +@anchor{settings elispobj-evil-toggle-key}@anchor{37} +@deffn {Emacs Lisp Autovariable} evil@w{-}toggle@w{-}key + +The key used to change to and from Emacs state. +Must be readable by @code{read-kbd-macro}. For example: “C-z”. + +Default: @code{"C-z"} +@end deffn + +@anchor{settings elispobj-evil-want-C-i-jump}@anchor{3c} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}i@w{-}jump + +Whether @code{C-i} jumps forward in the jump list (like Vim). +Otherwise, @code{C-i} inserts a tab character. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-want-C-u-delete}@anchor{3d} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}u@w{-}delete + +Whether @code{C-u} deletes back to indentation in insert state. +Otherwise, @code{C-u} applies a prefix argument. The binding of +@code{C-u} mirrors Emacs behaviour by default due to the relative +ubiquity of prefix arguments. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-want-C-u-scroll}@anchor{3e} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}u@w{-}scroll + +Whether @code{C-u} scrolls up (like Vim). +Otherwise, @code{C-u} applies a prefix argument. The binding of +@code{C-u} mirrors Emacs behaviour by default due to the relative +ubiquity of prefix arguments. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-want-C-d-scroll}@anchor{3b} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}d@w{-}scroll + +Whether @code{C-d} scrolls down (like Vim). + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-want-C-w-delete}@anchor{3f} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}w@w{-}delete + +Whether @code{C-w} deletes a word in Insert state. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-want-C-w-in-emacs-state}@anchor{40} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}C@w{-}w@w{-}in@w{-}emacs@w{-}state + +Whether @code{C-w} prefixes windows commands in Emacs state. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-want-Y-yank-to-eol}@anchor{43} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}Y@w{-}yank@w{-}to@w{-}eol + +Whether @code{Y} yanks to the end of the line. +The default behavior is to yank the whole line, like Vim. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-disable-insert-state-bindings}@anchor{15} +@deffn {Emacs Lisp Autovariable} evil@w{-}disable@w{-}insert@w{-}state@w{-}bindings + +Whether insert state bindings should be used. +Bindings for escape, delete and @ref{37,,evil-toggle-key} are always +available. If this is non-nil, default Emacs bindings are by and +large accessible in insert state. + +Default: @code{nil} +@end deffn + +@node Search,Indentation,Keybindings and other behaviour,Settings +@anchor{settings search}@anchor{50} +@section Search + + +@anchor{settings elispobj-evil-search-module}@anchor{2a} +@deffn {Emacs Lisp Autovariable} evil@w{-}search@w{-}module + +The search module to be used. May be either @code{isearch}, for +Emacs’ isearch module, or @code{evil-search}, for Evil’s own +interactive search module. N.b. changing this will not affect keybindings. +To swap out relevant keybindings, see @code{evil-select-search-module} function. + +Default: @code{isearch} +@end deffn + +@anchor{settings elispobj-evil-regexp-search}@anchor{27} +@deffn {Emacs Lisp Autovariable} evil@w{-}regexp@w{-}search + +Whether to use regular expressions for searching in @code{/} and @code{?}. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-search-wrap}@anchor{2b} +@deffn {Emacs Lisp Autovariable} evil@w{-}search@w{-}wrap + +Whether search with @code{/} and @code{?} wraps around the buffer. +If this is non-nil, search stops at the buffer boundaries. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-flash-delay}@anchor{19} +@deffn {Emacs Lisp Autovariable} evil@w{-}flash@w{-}delay + +Time in seconds to flash search matches after @code{n} and @code{N}. + +Default: @code{2} +@end deffn + +@anchor{settings elispobj-evil-ex-hl-update-delay}@anchor{18} +@deffn {Emacs Lisp Autovariable} evil@w{-}ex@w{-}hl@w{-}update@w{-}delay + +Time in seconds of idle before updating search highlighting. +Setting this to a period shorter than that of keyboard’s repeat +rate allows highlights to update while scrolling. + +Default: @code{0.02} +@end deffn + +@node Indentation,Cursor movement,Search,Settings +@anchor{settings indentation}@anchor{51} +@section Indentation + + +@anchor{settings elispobj-evil-auto-indent}@anchor{2} +@deffn {Emacs Lisp Autovariable} evil@w{-}auto@w{-}indent + +Whether to auto-indent when opening lines with @code{o} and @code{O}. + +Default: @code{t}, buffer-local +@end deffn + +@anchor{settings elispobj-evil-shift-width}@anchor{33} +@deffn {Emacs Lisp Autovariable} evil@w{-}shift@w{-}width + +The number of columns by which a line is shifted. +This applies to the shifting operators @code{>} and @code{<}. + +Default: @code{4}, buffer-local +@end deffn + +@anchor{settings elispobj-evil-shift-round}@anchor{32} +@deffn {Emacs Lisp Autovariable} evil@w{-}shift@w{-}round + +Whether shifting rounds to the nearest multiple. +If non-nil, @code{>} and @code{<} adjust line +indentation to the nearest multiple of @ref{33,,evil-shift-width}. + +Default: @code{t}, buffer-local +@end deffn + +@anchor{settings elispobj-evil-indent-convert-tabs}@anchor{1e} +@deffn {Emacs Lisp Autovariable} evil@w{-}indent@w{-}convert@w{-}tabs + +If non-nil, the @code{=} operator converts between leading tabs and spaces. +Whether tabs are converted to spaces or vice versa depends on the +value of @code{indent-tabs-mode}. + +Default: @code{t} +@end deffn + +@node Cursor movement,Cursor display,Indentation,Settings +@anchor{settings cursor-movement}@anchor{52} +@section Cursor movement + + +In standard Emacs terms, the cursor is generally understood to be +located between two characters. In Vim, and therefore also Evil, this +is the case in insert state, but in other states the cursor is +understood to be @emph{on} a character, and that this character is not a +newline. + +Forcing this behaviour in Emacs is the source of some potentially +surprising results (especially for traditional Emacs users—users +used to Vim may find the default behavior to their satisfaction). Many +of them can be tweaked using the following variables. + +@anchor{settings elispobj-evil-repeat-move-cursor}@anchor{28} +@deffn {Emacs Lisp Autovariable} evil@w{-}repeat@w{-}move@w{-}cursor + +Whether repeating commands with @code{.} may move the cursor. +If nil, the original cursor position is preserved, even if the command +normally would have moved the cursor. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-move-cursor-back}@anchor{26} +@deffn {Emacs Lisp Autovariable} evil@w{-}move@w{-}cursor@w{-}back + +Whether the cursor is moved backwards when exiting insert state. +If non-nil, the cursor moves “backwards” when exiting insert state, +so that it ends up on the character to the left. Otherwise it remains +in place, on the character to the right. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-move-beyond-eol}@anchor{25} +@deffn {Emacs Lisp Autovariable} evil@w{-}move@w{-}beyond@w{-}eol + +Whether the cursor can move past the end of the line. +If non-nil, the cursor is allowed to move one character past the +end of the line, as in Emacs. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-cross-lines}@anchor{7} +@deffn {Emacs Lisp Autovariable} evil@w{-}cross@w{-}lines + +Whether horizontal motions may move to other lines. If non-nil, +certain motions that conventionally operate in a single line may move +the cursor to other lines. Otherwise, they are restricted to the +current line. This applies to @code{h}, @code{SPC}, @code{f}, @code{F}, @code{t}, @code{T}, @code{~}. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-respect-visual-line-mode}@anchor{29} +@deffn {Emacs Lisp Autovariable} evil@w{-}respect@w{-}visual@w{-}line@w{-}mode + +Whether movement commands respect @code{visual-line-mode}. +If non-nil, @code{visual-line-mode} is generally respected when it is +on. In this case, motions such as @code{j} and +@code{k} navigate by visual lines (on the screen) rather +than “physical” lines (defined by newline characters). If nil, +the setting of @code{visual-line-mode} is ignored. + +This variable must be set before Evil is loaded. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-track-eol}@anchor{38} +@deffn {Emacs Lisp Autovariable} evil@w{-}track@w{-}eol + +Whether @code{$} “sticks” the cursor to the end of the line. +If non-nil, vertical motions after @code{$} maintain the cursor at the +end of the line, even if the target line is longer. This is analogous +to @code{track-eol}, but respects Evil’s interpretation of end-of-line. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-start-of-line}@anchor{36} +@deffn {Emacs Lisp Autovariable} evil@w{-}start@w{-}of@w{-}line + +Analogue of vim’s @code{startofline}. +If nil, preserve column when making relevant movements of the cursor. +Otherwise, move the cursor to the start of the line. + +Default: @code{nil} +@end deffn + +@node Cursor display,Window management,Cursor movement,Settings +@anchor{settings cursor-display}@anchor{53} +@section Cursor display + + +A state may change the appearance of the cursor. Use the variable +@ref{c,,evil-default-cursor} to set the default cursor, and the +variables @code{evil-normal-state-cursor}, @code{evil-insert-state-cursor} +etc. to set the cursors for specific states. The acceptable values +for all of them are the same. + +@anchor{settings elispobj-evil-default-cursor}@anchor{c} +@deffn {Emacs Lisp Autovariable} evil@w{-}default@w{-}cursor + +The default cursor. +May be a cursor type as per @code{cursor-type}, a color string as passed +to @code{set-cursor-color}, a zero-argument function for changing the +cursor, or a list of the above. + +Default: @code{t} +@end deffn + +@node Window management,Parenthesis highlighting,Cursor display,Settings +@anchor{settings window-management}@anchor{54} +@section Window management + + +@anchor{settings elispobj-evil-auto-balance-windows}@anchor{1} +@deffn {Emacs Lisp Autovariable} evil@w{-}auto@w{-}balance@w{-}windows + +If non-nil window creation and deletion trigger rebalancing. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-split-window-below}@anchor{35} +@deffn {Emacs Lisp Autovariable} evil@w{-}split@w{-}window@w{-}below + +If non-nil split windows are created below. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-vsplit-window-right}@anchor{3a} +@deffn {Emacs Lisp Autovariable} evil@w{-}vsplit@w{-}window@w{-}right + +If non-nil vertically split windows with are created to the right. + +Default: @code{nil} +@end deffn + +@node Parenthesis highlighting,Miscellaneous,Window management,Settings +@anchor{settings parenthesis-highlighting}@anchor{55} +@section Parenthesis highlighting + + +These settings concern the integration between Evil and +@code{show-paren-mode}. They take no effect if this mode is not enabled. + +@anchor{settings elispobj-evil-show-paren-range}@anchor{34} +@deffn {Emacs Lisp Autovariable} evil@w{-}show@w{-}paren@w{-}range + +The minimal distance between point and a parenthesis +which causes the parenthesis to be highlighted. + +Default: @code{0} +@end deffn + +@anchor{settings elispobj-evil-highlight-closing-paren-at-point-states}@anchor{1d} +@deffn {Emacs Lisp Autovariable} evil@w{-}highlight@w{-}closing@w{-}paren@w{-}at@w{-}point@w{-}states + +The states in which the closing parenthesis at point should be highlighted. +All states listed here highlight the closing parenthesis at +point (which is Vim’s default behavior). All others highlight the +parenthesis before point (which is Emacs default behavior). If +this list contains the symbol @code{not} then its meaning is inverted, +i.e. all states listed here highlight the closing parenthesis +before point. + +Default: @code{(not emacs insert replace)} +@end deffn + +@node Miscellaneous,,Parenthesis highlighting,Settings +@anchor{settings miscellaneous}@anchor{56} +@section Miscellaneous + + +@anchor{settings elispobj-evil-want-fine-undo}@anchor{42} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}fine@w{-}undo + +Whether actions are undone in several steps. +There are two possible choices: nil (“no”) means that all +changes made during insert state, including a possible delete +after a change operation, are collected in a single undo step. +Non-nil (“yes”) means that undo steps are determined according +to Emacs heuristics, and no attempt is made to aggregate changes. + +For backward compatibility purposes, the value @code{fine} is +interpreted as @code{nil}. This option was removed because it did not +work consistently. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-undo-system}@anchor{39} +@deffn {Emacs Lisp Autovariable} evil@w{-}undo@w{-}system + +Undo system Evil should use. If equal to @code{undo-tree} or +@code{undo-fu}, those packages must be installed. If equal to +@code{undo-tree}, @code{undo-tree-mode} must also be activated. If equal +to @code{undo-redo}, Evil uses commands natively available in Emacs 28. + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-backspace-join-lines}@anchor{3} +@deffn {Emacs Lisp Autovariable} evil@w{-}backspace@w{-}join@w{-}lines + +Whether backward delete in insert state may join lines. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-kbd-macro-suppress-motion-error}@anchor{20} +@deffn {Emacs Lisp Autovariable} evil@w{-}kbd@w{-}macro@w{-}suppress@w{-}motion@w{-}error + +Whether left/right motions signal errors in keyboard macros. +This variable only affects beginning-of-line or end-of-line errors +regarding the motions @code{h} and @code{SPC} +respectively. This may be desired since such errors cause macro +definition or execution to be terminated. There are four +possibilities: + + +@itemize - + +@item +@code{record}: errors are suppressed when recording macros, but not when +replaying them. + +@item +@code{replay}: errors are suppressed when replaying macros, but not when +recording them. + +@item +@code{t}: errors are suppressed in both cases. + +@item +@code{nil}: errors are never suppressed. +@end itemize + +Default: @code{nil} +@end deffn + +@anchor{settings elispobj-evil-mode-line-format}@anchor{23} +@deffn {Emacs Lisp Autovariable} evil@w{-}mode@w{-}line@w{-}format + +The position of the state tag in the mode line. +If set to @code{before} or @code{after}, the tag is placed at the beginning +or the end of the mode-line, respectively. If nil, there is no +tag. Otherwise it should be a cons cell @code{(WHERE . WHICH)}, where +@emph{WHERE} is either @code{before} or @code{after}, and @emph{WHICH} is a symbol in +@code{mode-line-format}. The tag is then placed before or after that +symbol, respectively. + +Default: @code{before} +@end deffn + +@anchor{settings elispobj-evil-mouse-word}@anchor{24} +@deffn {Emacs Lisp Autovariable} evil@w{-}mouse@w{-}word + +The @emph{thing-at-point} symbol for double click selection. +The double-click starts visual state in a special word selection +mode. This symbol is used to determine the words to be +selected. Possible values are @code{evil-word} or @code{evil-WORD}. + +Default: @code{evil-word} +@end deffn + +@anchor{settings elispobj-evil-bigword}@anchor{4} +@deffn {Emacs Lisp Autovariable} evil@w{-}bigword + +The set of characters to be interpreted as WORD boundaries. +This is enclosed with square brackets and used as a regular +expression. By default, whitespace characters are considered +WORD boundaries. + +Default: @code{"^ \t\r\n"}, buffer-local +@end deffn + +@anchor{settings elispobj-evil-esc-delay}@anchor{17} +@deffn {Emacs Lisp Autovariable} evil@w{-}esc@w{-}delay + +The time, in seconds, to wait for another key after escape. +If no further event arrives during this time, the event is +translated to @code{ESC}. Otherwise, it is translated according to +@code{input-decode-map}. This does not apply in Emacs state, and may +also be inhibited by setting @code{evil-inhibit-esc}. + +Default: @code{0.01} +@end deffn + +@anchor{settings elispobj-evil-intercept-esc}@anchor{1f} +@deffn {Emacs Lisp Autovariable} evil@w{-}intercept@w{-}esc + +Whether Evil should intercept the escape key. +In the terminal, escape and a meta key sequence both generate the +same event. In order to distingush these, Evil uses +@code{input-decode-map}. It is not necessary to do this in a graphical +Emacs session. However, if you prefer to use @code{C-[} as escape (which +is identical to the terminal escape key code), this interception must +also happen in graphical Emacs sessions. Set this variable to +@code{always}, t (only in the terminal) or nil (never intercept). + +Default: @code{always} +@end deffn + +@anchor{settings elispobj-evil-kill-on-visual-paste}@anchor{21} +@deffn {Emacs Lisp Autovariable} evil@w{-}kill@w{-}on@w{-}visual@w{-}paste + +Whether pasting in visual state adds the replaced text to the +kill ring, making it the default for the next paste. The default, +replicates the default Vim behavior. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-echo-state}@anchor{16} +@deffn {Emacs Lisp Autovariable} evil@w{-}echo@w{-}state + +Whether to signal the current state in the echo area. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-complete-all-buffers}@anchor{6} +@deffn {Emacs Lisp Autovariable} evil@w{-}complete@w{-}all@w{-}buffers + +Whether completion looks for matches in all buffers. +This applies to @code{C-n} and @code{C-p} in insert state. + +Default: @code{t} +@end deffn + +@anchor{settings elispobj-evil-want-empty-ex-last-command}@anchor{41} +@deffn {Emacs Lisp Autovariable} evil@w{-}want@w{-}empty@w{-}ex@w{-}last@w{-}command + +Whether to default to evil-ex-previous-command at empty ex prompt. + +Default: @code{t} +@end deffn + +@node Keymaps,Hooks,Settings,Top +@anchor{keymaps doc}@anchor{57}@anchor{keymaps chapter-keymaps}@anchor{4f}@anchor{keymaps keymaps}@anchor{58} +@chapter Keymaps + + +Evil’s key bindings are stored in a number of different keymaps. Each +state has a @emph{global keymap}, where the default bindings for that state +are stored. They are named @code{evil-normal-state-map}, +@code{evil-insert-state-map}, and so on. The bindings in these maps are +visible in all buffers currently in the corresponding state. + +These keymaps function like ordinary Emacs keymaps and may be modified +using the Emacs function @code{define-key}: + +@example +(define-key evil-normal-state-map (kbd "w") 'some-function) +@end example + +This binds the key @code{w} to the command @code{some-function} in normal +state. The use of @code{kbd} is optional for simple key sequences, like +this one, but recommended in general. + +Most of Evil’s bindings are defined in the file @code{evil-maps.el}. + +To facilitate shared keybindings between states, some states may +activate keybindings from other states as well. For example, motion +state bindings are visible in normal and visual state, and normal +state bindings are also visible in visual state. + +Each state also has a @emph{buffer-local keymap} which is specific to the +current buffer, and which takes precedence over the global keymap. +These maps are most suitably modified by a mode hook. They are named +@code{evil-normal-state-local-map}, @code{evil-insert-state-local-map}, and +so on. + +@example +(add-hook 'some-mode-hook + (lambda () + (define-key evil-normal-state-local-map + (kbd "w") 'some-function))) +@end example + +For convenience, the functions @ref{1c,,evil-global-set-key} and +@ref{22,,evil-local-set-key} are available for setting global and +local state keys. + +@anchor{keymaps elispobj-evil-global-set-key}@anchor{1c} +@deffn {Emacs Lisp Autofunction} (evil@w{-}global@w{-}set@w{-}key STATE KEY DEF) + +Bind @emph{KEY} to @emph{DEF} in @emph{STATE}. +@end deffn + +@anchor{keymaps elispobj-evil-local-set-key}@anchor{22} +@deffn {Emacs Lisp Autofunction} (evil@w{-}local@w{-}set@w{-}key STATE KEY DEF) + +Bind @emph{KEY} to @emph{DEF} in @emph{STATE} in the current buffer. +@end deffn + +The above examples could therefore have been written as follows: + +@example +(evil-global-set-key 'normal (kbd "w") 'some-function) + +(add-hook 'some-mode-hook + (lambda () + (evil-local-set-key 'normal (kbd "w") 'some-function))) +@end example + +@menu +* evil-define-key:: +* Leader keys:: + +@end menu + +@node evil-define-key,Leader keys,,Keymaps +@anchor{keymaps evil-define-key}@anchor{59} +@section evil-define-key + + +Evil provides the macro @ref{f,,evil-define-key} for adding state +bindings to ordinary keymaps. It is quite powerful, and is the +preferred method for fine-tuning bindings to activate in specific +circumstances. + +@anchor{keymaps elispobj-evil-define-key}@anchor{f} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}key STATE KEYMAP KEY DEF [BINDINGS...]) + +Create a @emph{STATE} binding from @emph{KEY} to @emph{DEF} for @emph{KEYMAP}. +@emph{STATE} is one of @code{normal}, @code{insert}, @code{visual}, @code{replace}, +@code{operator}, @code{motion}, @code{emacs}, or a list of one or more of +these. Omitting a state by using @code{nil} corresponds to a standard +Emacs binding using @code{define-key}. The remaining arguments are +like those of @code{define-key}. For example: + +@example +(evil-define-key 'normal foo-map "a" 'bar) +@end example + +This creates a binding from @code{a} to @code{bar} in normal state, which +is active whenever @code{foo-map} is active. Using nil for the state, +the following lead to identical bindings: + +@example +(evil-define-key nil foo-map "a" 'bar) +(define-key foo-map "a" 'bar) +@end example + +It is possible to specify multiple states and/or bindings at +once: + +@example +(evil-define-key '(normal visual) foo-map + "a" 'bar + "b" 'foo) +@end example + +If @code{foo-map} has not been initialized yet, this macro adds an +entry to @code{after-load-functions}, delaying execution as necessary. + +@emph{KEYMAP} may also be a quoted symbol. If the symbol is @code{global}, the +global evil keymap corresponding to the state(s) is used, meaning +the following lead to identical bindings: + +@example +(evil-define-key 'normal 'global "a" 'bar) +(evil-global-set-key 'normal "a" 'bar) +@end example + +The symbol @code{local} may also be used, which corresponds to using +@ref{22,,evil-local-set-key}. If a quoted symbol is used that is not +@code{global} or @code{local}, it is assumed to be the name of a minor +mode, in which case @code{evil-define-minor-mode-key} is used. +@end deffn + +There follows a brief overview of the main functions of this macro. + + +@itemize - + +@item +Define a binding in a given state + +@example +(evil-define-key 'state 'global (kbd "key") 'target) +@end example + +@item +Define a binding in a given state in the current buffer + +@example +(evil-define-key 'state 'local (kbd "key") 'target) +@end example + +@item +Define a binding in a given state under the @emph{foo-mode} major mode. + +@example +(evil-define-key 'state foo-mode-map (kbd "key") 'target) +@end example + +Note that @code{foo-mode-map} is unquoted, and that this form is safe +before @code{foo-mode-map} is loaded. + +@item +Define a binding in a given state under the @emph{bar-mode} minor mode. + +@example +(evil-define-key 'state 'bar-mode (kbd "key") 'target) +@end example + +Note that @code{bar-mode} is quoted, and that this form is safe before +@code{bar-mode} is loaded. +@end itemize + +The macro @ref{f,,evil-define-key} can be used to augment existing +modes with state bindings, as well as creating packages with custom +bindings. For example, the following will create a minor mode +@code{foo-mode} with normal state bindings for the keys @code{w} and +@code{e}: + +@example +(define-minor-mode foo-mode + "Foo mode." + :keymap (make-sparse-keymap)) + +(evil-define-key 'normal 'foo-mode "w" 'bar) +(evil-define-key 'normal 'foo-mode "e" 'baz) +@end example + +This minor mode can then be enabled in any buffers where the custom +bindings are desired: + +@example +(add-hook 'text-mode-hook 'foo-mode) ; enable alongside text-mode +@end example + +@node Leader keys,,evil-define-key,Keymaps +@anchor{keymaps leader-keys}@anchor{5a} +@section Leader keys + + +Evil supports a simple implementation of Vim’s @emph{leader} keys. To bind +a function to a leader key you can use the expression @code{<leader>} in +a key mapping, e.g. + +@example +(evil-define-key 'normal 'global (kbd "<leader>fs") 'save-buffer) +@end example + +Likewise, you can use the expression @code{<localleader>} to mimic Vim’s +local leader, which is designed for mode-specific key bindings. + +You can use the function @ref{31,,evil-set-leader} to designate +which key acts as the leader and the local leader. + +@anchor{keymaps elispobj-evil-set-leader}@anchor{31} +@deffn {Emacs Lisp Autofunction} (evil@w{-}set@w{-}leader STATE KEY [LOCALLEADER]) + +Set @emph{KEY} to trigger leader bindings in @emph{STATE}. +@emph{KEY} should be in the form produced by @code{kbd}. @emph{STATE} is one of +@code{normal}, @code{insert}, @code{visual}, @code{replace}, @code{operator}, @code{motion}, +@code{emacs}, a list of one or more of these, or @code{nil}, which means +all of the above. If @emph{LOCALLEADER} is non-nil, set the local leader +instead. +@end deffn + +@node Hooks,Extension,Keymaps,Top +@anchor{hooks doc}@anchor{5b}@anchor{hooks hooks}@anchor{5c} +@chapter Hooks + + +A @emph{hook} is a list of functions that are executed when certain events +happen. Hooks are modified with the Emacs function @code{add-hook}. +Evil provides entry and exit hooks for all its states. For example, +when switching from normal state to insert state, all functions in +@code{evil-normal-state-exit-hook} and @code{evil-insert-state-entry-hook} +are executed. + +It is guaranteed that the exit hook will be executed before the entry +hook on all state switches. + +During the hook execution, the variables @code{evil-next-state} and +@code{evil-previous-state} contain information about the states being +switched to and from, respectively. + +@node Extension,Frequently Asked Questions,Hooks,Top +@anchor{extension doc}@anchor{5d}@anchor{extension extension}@anchor{5e} +@chapter Extension + + +The main functionality of Evil is implemented in terms of reusable +macros. Package writers can use these to define new commands. + +@menu +* Motions:: +* Operators:: +* Text objects:: +* Range types:: +* States:: + +@end menu + +@node Motions,Operators,,Extension +@anchor{extension motions}@anchor{5f} +@section Motions + + +A @emph{motion} is a command which moves the cursor, such as @code{w} or +@code{e}. Motions are defined with the macro +@ref{10,,evil-define-motion}. Motions not defined in this way +should be declared with @ref{9,,evil-declare-motion}. + +@anchor{extension elispobj-evil-declare-motion}@anchor{9} +@deffn {Emacs Lisp Autofunction} (evil@w{-}declare@w{-}motion COMMAND) + +Declare @emph{COMMAND} to be a movement function. +This ensures that it behaves correctly in visual state. +@end deffn + +@anchor{extension elispobj-evil-define-motion}@anchor{10} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}motion MOTION (COUNT ARGS...) DOC [[KEY VALUE]...] BODY...) + +Define a motion command @emph{MOTION}. +@emph{ARGS} is a list of arguments. Motions can have any number of +arguments, but the first (if any) has the predefined meaning of +count. @emph{BODY} must execute the motion by moving point. + +Optional keyword arguments are: + + +@itemize - + +@item +@code{:type} - determines how the motion works after an operator (one of +@code{inclusive}, @code{line}, @code{block} and @code{exclusive}, or a self-defined +motion type) + +@item +@code{:jump} - if non-nil, the previous position is stored in the jump +list, so that it can be restored with @code{C-o} +@end itemize +@end deffn + +For example, this is a motion that moves the cursor forward by a +number of characters: + +@example +(evil-define-motion foo-forward (count) + "Move to the right by COUNT characters." + :type inclusive + (forward-char (or count 1))) +@end example + +The @emph{type} of a motion determines how it works when used together with +an operator. Inclusive motions include the endpoint in the range +being operated on, while exclusive motions do not. Line motions +extend the whole range to linewise positions, effectively behaving as +if the endpoint were really at the end of the line. Blockwise ranges +behave as a “rectangle” on screen rather than a contiguous range of +characters. + +@node Operators,Text objects,Motions,Extension +@anchor{extension operators}@anchor{60} +@section Operators + + +An operator is a command that acts on the text moved over by a motion, +such as @code{c} (change), @code{d} (delete) or @code{y} (yank or +copy, not to be confused with “yank” in Emacs terminology which means +@emph{paste}). + +@anchor{extension elispobj-evil-define-operator}@anchor{11} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}operator OPERATOR (BEG END ARGS...) DOC [[KEY VALUE]...] BODY...) + +Define an operator command @emph{OPERATOR}. +The operator acts on the range of characters @emph{BEG} through +@emph{END}. @emph{BODY} must execute the operator by potentially manipulating +the buffer contents, or otherwise causing side effects to happen. + +Optional keyword arguments are: + + +@itemize - + +@item +@code{:type} - force the input range to be of a given type (@code{inclusive}, +@code{line}, @code{block}, and @code{exclusive}, or a self-defined motion type). + +@item +@code{:motion} - use a predetermined motion instead of waiting for one +from the keyboard. This does not affect the behavior in visual +state, where selection boundaries are always used. + +@item +@code{:repeat} - if non-nil (default), then @code{.} will repeat the +operator. + +@item +@code{:move-point} - if non-nil (default), the cursor will be moved to +the beginning of the range before the body executes + +@item +@code{:keep-visual} - if non-nil, the selection is not disabled when the +operator is executed in visual state. By default, visual state is +exited automatically. +@end itemize +@end deffn + +For example, this is an operator that performs ROT13 encryption on the +text under consideration: + +@example +(evil-define-operator evil-rot13 (beg end) + "ROT13 encrypt text." + (rot13-region beg end)) +@end example + +Binding this to @code{g?} (where it is by default) will cause a key +sequence such as @code{g?w} to encrypt from the current cursor to the +end of the word. + +@node Text objects,Range types,Operators,Extension +@anchor{extension text-objects}@anchor{61} +@section Text objects + + +Text objects are like motions in that they define a range over which +an operator may act. Unlike motions, text objects can set both a +beginning and an endpoint. In visual state, text objects alter both +ends of the selection. + +Text objects are not directly usable in normal state. Instead, they +are bound in the two keymaps @code{evil-inner-text-ojects-map} and +@code{evil-outer-text-objects-map}, which are available in visual and +operator-pending state under the keys @code{i} and @code{a} +respectively. + +@anchor{extension elispobj-evil-define-text-object}@anchor{13} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}text@w{-}object OBJECT (COUNT) DOC [[KEY VALUE]...] BODY...) + +Define a text object command @emph{OBJECT}. +@emph{BODY} should return a range @code{(BEG END)} to the right of point +if @emph{COUNT} is positive, and to the left of it if negative. + +Optional keyword arguments: + + +@itemize - + +@item +@code{:type} - determines how the range applies after an operator +(@code{inclusive}, @code{line}, @code{block}, and @code{exclusive}, or a self-defined +motion type). + +@item +@code{:extend-selection} - if non-nil (default), the text object always +enlarges the current selection. Otherwise, it replaces the current +selection. +@end itemize +@end deffn + +For eample, this is a text object which selects the next three +characters after the current location: + +@example +(evil-define-text-object foo (count) + "Select three characters." + (list (point) (+ 3 (point)))) +@end example + +For convenience, Evil provides several functions returning a list of +positions which can be used for defining text objects. All of them +follow the convention that a positive @emph{count} selects text after the +current location, while negative @emph{count} selects text before it. + +@cartouche +@quotation Note +The @emph{thingatpt} library is used quite extensively in Evil to define +text objects, and this dependency leaks through in the following +functions. A @emph{thing} in this context is any symbol for which there +is a function called @code{forward-THING} @footnote{@w{(1)} +There are many more ways that a @emph{thing} can be defined, +but the definition of @code{forward-THING} is perhaps the most +straightforward way to go about it. +} which moves past a +number of @emph{things}. +@end quotation +@end cartouche + +@anchor{extension elispobj-evil-select-inner-object}@anchor{2d} +@deffn {Emacs Lisp Autofunction} (evil@w{-}select@w{-}inner@w{-}object THING BEG END TYPE [COUNT LINE]) + +Return an inner text object range of @emph{COUNT} objects. +If @emph{COUNT} is positive, return objects following point; if @emph{COUNT} is +negative, return objects preceding point. If one is unspecified, +the other is used with a negative argument. @emph{THING} is a symbol +understood by @emph{thing-at-point}. @emph{BEG}, @emph{END} and @emph{TYPE} specify the +current selection. If @emph{LINE} is non-nil, the text object should be +linewise, otherwise it is character wise. +@end deffn + +@anchor{extension elispobj-evil-select-an-object}@anchor{2c} +@deffn {Emacs Lisp Autofunction} (evil@w{-}select@w{-}an@w{-}object THING BEG END TYPE COUNT [LINE]) + +Return an outer text object range of @emph{COUNT} objects. +If @emph{COUNT} is positive, return objects following point; if @emph{COUNT} is +negative, return objects preceding point. If one is unspecified, +the other is used with a negative argument. @emph{THING} is a symbol +understood by @emph{thing-at-point}. @emph{BEG}, @emph{END} and @emph{TYPE} specify the +current selection. If @emph{LINE} is non-nil, the text object should be +linewise, otherwise it is character wise. +@end deffn + +@anchor{extension elispobj-evil-select-paren}@anchor{2e} +@deffn {Emacs Lisp Autofunction} (evil@w{-}select@w{-}paren OPEN CLOSE BEG END TYPE COUNT [INCLUSIVE]) + +Return a range @code{(BEG END)} of @emph{COUNT} delimited text objects. +@emph{OPEN} and @emph{CLOSE} specify the opening and closing delimiter, +respectively. @emph{BEG} @emph{END} @emph{TYPE} are the currently selected (visual) +range. If @emph{INCLUSIVE} is non-nil, @emph{OPEN} and @emph{CLOSE} are included in +the range; otherwise they are excluded. + +The types of @emph{OPEN} and @emph{CLOSE} specify which kind of THING is used +for parsing with @code{evil-select-block}. If @emph{OPEN} and @emph{CLOSE} are +characters @code{evil-up-paren} is used. Otherwise @emph{OPEN} and @emph{CLOSE} +must be regular expressions and @code{evil-up-block} is used. + +If the selection is exclusive, whitespace at the end or at the +beginning of the selection until the end-of-line or beginning-of-line +is ignored. +@end deffn + +@node Range types,States,Text objects,Extension +@anchor{extension range-types}@anchor{62} +@section Range types + + +A @emph{type} is a transformation acting on a pair of buffer positions. +Evil defines the types @code{inclusive}, @code{line}, @code{block} and +@code{exclusive}, which are used for motion ranges and visual selection. +New types may be defined with the macro @emph{evil-define-type}. + +@anchor{extension elispobj-evil-define-type}@anchor{14} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}type TYPE DOC [[KEY FUNC]...]) + +Define type @emph{TYPE}. +@emph{DOC} is a general description and shows up in all docstrings. + +Optional keyword arguments: + + +@itemize - + +@item +@code{:expand} - expansion function. This function should accept two +positions in the current buffer, BEG and END,and return a pair of +expanded buffer positions. + +@item +@code{:contract} - the opposite of @code{:expand}. Optional. + +@item +@code{:one-to-one} - non-nil if expansion is one-to-one. This means that +@code{:expand} followed by @code{:contract} always return the original range. + +@item +@code{:normalize} - normalization function. This function should accept +two unexpanded positions and adjust them before expansion. May be +used to deal with buffer boundaries. + +@item +@code{:string} - description function. Takes two buffer positions and +returns a human-readable string. For example “2 lines” +@end itemize + +If further keywords and functions are specified, they are assumed to +be transformations on buffer positions, like @code{:expand} and @code{:contract}. +@end deffn + +@node States,,Range types,Extension +@anchor{extension states}@anchor{63} +@section States + + +States are defined with the macro @ref{12,,evil-define-state}, +which takes care to define the necessary hooks, keymaps and variables, +as well as a toggle function @code{evil-NAME-state} and a predicate +function @code{evil-NAME-state-p} for checking whether the state is +active. + +@anchor{extension elispobj-evil-define-state}@anchor{12} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}state STATE DOC [[KEY VAL]...] BODY...) + +Define an Evil state @emph{STATE}. +@emph{DOC} is a general description and shows up in all docstrings; +the first line of the string should be the full name of the state. + +@emph{BODY} is executed each time the state is enabled or disabled. + +Optional keyword arguments: + + +@itemize - + +@item +@code{:tag} - the mode line indicator, e.g. “<T>”. + +@item +@code{:message} - string shown in the echo area when the state is +activated. + +@item +@code{:cursor} - default cursor specification. + +@item +@code{:enable} - list of other state keymaps to enable when in this +state. + +@item +@code{:entry-hook} - list of functions to run when entering this state. + +@item +@code{:exit-hook} - list of functions to run when exiting this state. + +@item +@code{:suppress-keymap} - if non-nil, effectively disables bindings to +@code{self-insert-command} by making @code{evil-suppress-map} the parent of +the global state keymap. +@end itemize + +The global keymap of this state will be @code{evil-test-state-map}, +the local keymap will be @code{evil-test-state-local-map}, and so on. +@end deffn + +For example: + +@example +(evil-define-state test + "Test state." + :tag " <T> " + (message (if (evil-test-state-p) + "Enabling test state." + "Disabling test state."))) +@end example + +@node Frequently Asked Questions,Internals,Extension,Top +@anchor{faq doc}@anchor{64}@anchor{faq frequently-asked-questions}@anchor{65} +@chapter Frequently Asked Questions + + +@menu +* Problems with the escape key in the terminal:: +* Underscore is not a word character:: + +@end menu + +@node Problems with the escape key in the terminal,Underscore is not a word character,,Frequently Asked Questions +@anchor{faq problems-with-the-escape-key-in-the-terminal}@anchor{66} +@section Problems with the escape key in the terminal + + +A common problem when using Evil in terminal mode is a certain delay +after pressing the escape key. Even more, when pressing the escape key +followed quickly by another key the command is recognized as +@code{M-<key>} instead of two separate keys: @code{ESC} followed by +@code{<key>}. In fact, it is perfectly valid to simulate +@code{M-<key>} by pressing @code{ESC <key>} quickly (but see below). + +The reason for this is that in terminal mode a key sequence involving +the meta key (or alt key) always generates a so called “escape +sequence”, i.e. a sequence of two events sent to Emacs, the first +being @code{ESC} and the second the key pressed simultaneously. The +problem is that pressing the escape key itself also generates the +@code{ESC} event. Thus, if Emacs (and therefore Evil) receives an +@code{ESC} event there is no way to tell whether the escape key has +been pressed (and no further event will arrive) or a @code{M-<key>} +combination has been pressed (and the @code{<key>} event will arrive +soon). In order to distinguish both situations Evil does the +following. After receiving an @code{ESC} event Evil waits for a short +time period (specified by the variable @ref{17,,evil-esc-delay} +which defaults to 0.01 seconds) for another event. If no other event +arrives Evil assumes that the plain escape key has been pressed, +otherwise it assumes a @code{M-<key>} combination has been pressed and +combines the @code{ESC} event with the second one. Because a +@code{M-<key>} sequence usually generates both events in very quick +succession, 0.01 seconds are usually enough and the delay is hardly +noticeable by the user. + +If you use a terminal multiplexer like @emph{tmux} or @emph{screen} the +situation may be worse. These multiplexers have exactly the same +problem recognizing @code{M-<key>} sequences and often introduce their +own delay for the @code{ESC} key. There is no way for Evil to +influence this delay. In order to reduce it you must reconfigure your +terminal multiplexer. + +Note that this problem should not arise when using Evil in graphical +mode. The reason is that in this case the escape key itself generates +a different command, namely @code{escape} (a symbol) and hence Evil can +distinguish whether the escape key or a @code{M-<key>} combination has +been pressed. But this also implies that pressing @code{ESC} followed +by <key> cannot be used to simulate @code{M-<key>} in graphical mode! + +@node Underscore is not a word character,,Problems with the escape key in the terminal,Frequently Asked Questions +@anchor{faq underscore-is-not-a-word-character}@anchor{67} +@section Underscore is not a word character + + +An underscore @code{_} is a word character in Vim. This means that word +motions like @code{w} skip over underlines in a sequence of letters as +if it was a letter itself. In contrast, in Evil the underscore is +often a non-word character like operators, e.g. @code{+}. + +The reason is that Evil uses Emacs’ definition of a word and this +definition does often not include the underscore. In Emacs word +characters are determined by the syntax-class of the buffer. The +syntax-class usually depends on the major-mode of this buffer. This +has the advantage that the definition of a “word” may be adapted to +the particular type of document being edited. Evil uses Emacs’ +definition and does not simply use Vim’s definition in order to be +consistent with other Emacs functions. For example, word characters +are exactly those characters that are matched by the regular +expression character class @code{[:word:]}. + +If you would be satisfied by having the @code{*} and @code{#} searches +use symbols instead of words, this can be achieved by setting the +@code{evil-symbol-word-search} variable to @code{t}. + +If you want the underscore to be recognised as word character for other +motions, you can modify its entry in the syntax-table: + +@example +(modify-syntax-entry ?_ "w") +@end example + +This gives the underscore the ‘word’ syntax class. You can use a +mode-hook to modify the syntax-table in all buffers of some mode, +e.g.: + +@example +(add-hook 'c-mode-common-hook + (lambda () (modify-syntax-entry ?_ "w"))) +@end example + +This gives the underscore the word syntax-class in all C-like buffers. + +Similarly to Emacs’ definition of a word, the definition of a “symbol” is also +dependent on the syntax-class of the buffer, which often includes the +underscore. The default text objects keymap associates kbd::@cite{o} with the symbol +object, making kbd::@cite{cio} a good alternative to Vim’s kbd::@cite{ciw}, for example. +The following will swap between the word and symbol objects in the keymap: + +@example +(define-key evil-outer-text-objects-map "w" 'evil-a-symbol) +(define-key evil-inner-text-objects-map "w" 'evil-inner-symbol) +(define-key evil-outer-text-objects-map "o" 'evil-a-word) +(define-key evil-inner-text-objects-map "o" 'evil-inner-word) +@end example + +This will not change the motion keys, however. One way to make word motions +operate as symbol motions is to alias the @code{evil-word} @emph{thing} @footnote{@w{(1)} +Many of Evil’s text objects and motions are defined in +terms of the @emph{thingatpt} library, which in this case are defined +entirely in terms of @code{forward-THING} functions. Thus aliasing +one to another should make all motions and text objects implemented +in terms of that @emph{thing} behave the same. +} to +the @code{evil-symbol} thing: + +@example +(defalias 'forward-evil-word 'forward-evil-symbol) +@end example + +@node Internals,The GNU Free Documentation License,Frequently Asked Questions,Top +@anchor{internals doc}@anchor{68}@anchor{internals internals}@anchor{69} +@chapter Internals + + +@menu +* Command properties:: + +@end menu + +@node Command properties,,,Internals +@anchor{internals command-properties}@anchor{6a} +@section Command properties + + +Evil defines @emph{command properties} to store information about commands +@footnote{@w{(1)} +In this context, a @emph{command} may mean any Evil motion, +text object, operator or indeed other Emacs commands, which have +not been defined through the Evil machinery. +}, such as whether they should be repeated. A command +property is a @code{:keyword} with an associated value, e.g. +@code{:repeat nil}. + +@anchor{internals elispobj-evil-add-command-properties}@anchor{0} +@deffn {Emacs Lisp Autofunction} (evil@w{-}add@w{-}command@w{-}properties COMMAND [PROPERTIES...]) + +Add @emph{PROPERTIES} to @emph{COMMAND}. +@emph{PROPERTIES} should be a property list. +To replace all properties at once, use @ref{2f,,evil-set-command-properties}. +@end deffn + +@anchor{internals elispobj-evil-set-command-properties}@anchor{2f} +@deffn {Emacs Lisp Autofunction} (evil@w{-}set@w{-}command@w{-}properties COMMAND [PROPERTIES...]) + +Replace all of @emph{COMMAND}’s properties with @emph{PROPERTIES}. +@emph{PROPERTIES} should be a property list. +This erases all previous properties; to only add properties, +use @code{evil-set-command-property}. +@end deffn + +@anchor{internals elispobj-evil-get-command-properties}@anchor{1a} +@deffn {Emacs Lisp Autofunction} (evil@w{-}get@w{-}command@w{-}properties COMMAND) + +Return all Evil properties of @emph{COMMAND}. +See also @ref{1b,,evil-get-command-property}. +@end deffn + +@anchor{internals elispobj-evil-get-command-property}@anchor{1b} +@deffn {Emacs Lisp Autofunction} (evil@w{-}get@w{-}command@w{-}property COMMAND PROPERTY [DEFAULT]) + +Return the value of Evil @emph{PROPERTY} of @emph{COMMAND}. +If the command does not have the property, return @emph{DEFAULT}. +See also @ref{1a,,evil-get-command-properties}. +@end deffn + +@anchor{internals elispobj-evil-define-command}@anchor{e} +@deffn {Emacs Lisp Autofunction} (evil@w{-}define@w{-}command COMMAND (ARGS...) DOC [[KEY VALUE]...] BODY...) + +Define a command @emph{COMMAND}. +@end deffn + +For setting repeat properties, use the following functions: + +@anchor{internals elispobj-evil-declare-repeat}@anchor{b} +@deffn {Emacs Lisp Autofunction} (evil@w{-}declare@w{-}repeat COMMAND) + +Declare @emph{COMMAND} to be repeatable. +@end deffn + +@anchor{internals elispobj-evil-declare-not-repeat}@anchor{a} +@deffn {Emacs Lisp Autofunction} (evil@w{-}declare@w{-}not@w{-}repeat COMMAND) + +Declare @emph{COMMAND} to be nonrepeatable. +@end deffn + +@anchor{internals elispobj-evil-declare-change-repeat}@anchor{8} +@deffn {Emacs Lisp Autofunction} (evil@w{-}declare@w{-}change@w{-}repeat COMMAND) + +Declare @emph{COMMAND} to be repeatable by buffer changes rather than +keystrokes. +@end deffn + +@node The GNU Free Documentation License,Emacs lisp functions and variables,Internals,Top +@anchor{license doc}@anchor{6b}@anchor{license the-gnu-free-documentation-license}@anchor{6c} +@chapter The GNU Free Documentation License + + +Version 1.3, 3 November 2008 + +@quotation + +Copyright (c) 2000, 2001, 2002, 2007, 2008 Free Software +Foundation, Inc. @indicateurl{http://fsf.org/} + +Everyone is permitted to copy and distribute verbatim copies of +this license document, but changing it is not allowed. +@end quotation + + +@enumerate 0 + +@item +PREAMBLE + +The purpose of this License is to make a manual, textbook, or other +functional and useful document @emph{free} in the sense of freedom: to +assure everyone the effective freedom to copy and redistribute it, +with or without modifying it, either commercially or +noncommercially. Secondarily, this License preserves for the +author and publisher a way to get credit for their work, while not +being considered responsible for modifications made by others. + +This License is a kind of “copyleft”, which means that derivative +works of the document must themselves be free in the same sense. +It complements the GNU General Public License, which is a copyleft +license designed for free software. + +We have designed this License in order to use it for manuals for +free software, because free software needs free documentation: a +free program should come with manuals providing the same freedoms +that the software does. But this License is not limited to +software manuals; it can be used for any textual work, regardless +of subject matter or whether it is published as a printed book. We +recommend this License principally for works whose purpose is +instruction or reference. + +@item +APPLICABILITY AND DEFINITIONS + +This License applies to any manual or other work, in any medium, +that contains a notice placed by the copyright holder saying it can +be distributed under the terms of this License. Such a notice +grants a world-wide, royalty-free license, unlimited in duration, +to use that work under the conditions stated herein. The +“Document”, below, refers to any such manual or work. Any member +of the public is a licensee, and is addressed as “you”. You accept +the license if you copy, modify or distribute the work in a way +requiring permission under copyright law. + +A “Modified Version” of the Document means any work containing the +Document or a portion of it, either copied verbatim, or with +modifications and/or translated into another language. + +A “Secondary Section” is a named appendix or a front-matter section +of the Document that deals exclusively with the relationship of the +publishers or authors of the Document to the Document’s overall +subject (or to related matters) and contains nothing that could +fall directly within that overall subject. (Thus, if the Document +is in part a textbook of mathematics, a Secondary Section may not +explain any mathematics.) The relationship could be a matter of +historical connection with the subject or with related matters, or +of legal, commercial, philosophical, ethical or political position +regarding them. + +The “Invariant Sections” are certain Secondary Sections whose +titles are designated, as being those of Invariant Sections, in the +notice that says that the Document is released under this License. +If a section does not fit the above definition of Secondary then it +is not allowed to be designated as Invariant. The Document may +contain zero Invariant Sections. If the Document does not identify +any Invariant Sections then there are none. + +The “Cover Texts” are certain short passages of text that are +listed, as Front-Cover Texts or Back-Cover Texts, in the notice +that says that the Document is released under this License. A +Front-Cover Text may be at most 5 words, and a Back-Cover Text may +be at most 25 words. + +A “Transparent” copy of the Document means a machine-readable copy, +represented in a format whose specification is available to the +general public, that is suitable for revising the document +straightforwardly with generic text editors or (for images composed +of pixels) generic paint programs or (for drawings) some widely +available drawing editor, and that is suitable for input to text +formatters or for automatic translation to a variety of formats +suitable for input to text formatters. A copy made in an otherwise +Transparent file format whose markup, or absence of markup, has +been arranged to thwart or discourage subsequent modification by +readers is not Transparent. An image format is not Transparent if +used for any substantial amount of text. A copy that is not +“Transparent” is called “Opaque”. + +Examples of suitable formats for Transparent copies include plain +ASCII without markup, Texinfo input format, LaTeX input format, +SGML or XML using a publicly available DTD, and standard-conforming +simple HTML, PostScript or PDF designed for human modification. +Examples of transparent image formats include PNG, XCF and JPG. +Opaque formats include proprietary formats that can be read and +edited only by proprietary word processors, SGML or XML for which +the DTD and/or processing tools are not generally available, and +the machine-generated HTML, PostScript or PDF produced by some word +processors for output purposes only. + +The “Title Page” means, for a printed book, the title page itself, +plus such following pages as are needed to hold, legibly, the +material this License requires to appear in the title page. For +works in formats which do not have any title page as such, “Title +Page” means the text near the most prominent appearance of the +work’s title, preceding the beginning of the body of the text. + +The “publisher” means any person or entity that distributes copies +of the Document to the public. + +A section “Entitled XYZ” means a named subunit of the Document +whose title either is precisely XYZ or contains XYZ in parentheses +following text that translates XYZ in another language. (Here XYZ +stands for a specific section name mentioned below, such as +“Acknowledgements”, “Dedications”, “Endorsements”, or “History”.) +To “Preserve the Title” of such a section when you modify the +Document means that it remains a section “Entitled XYZ” according +to this definition. + +The Document may include Warranty Disclaimers next to the notice +which states that this License applies to the Document. These +Warranty Disclaimers are considered to be included by reference in +this License, but only as regards disclaiming warranties: any other +implication that these Warranty Disclaimers may have is void and +has no effect on the meaning of this License. + +@item +VERBATIM COPYING + +You may copy and distribute the Document in any medium, either +commercially or noncommercially, provided that this License, the +copyright notices, and the license notice saying this License +applies to the Document are reproduced in all copies, and that you +add no other conditions whatsoever to those of this License. You +may not use technical measures to obstruct or control the reading +or further copying of the copies you make or distribute. However, +you may accept compensation in exchange for copies. If you +distribute a large enough number of copies you must also follow the +conditions in section 3. + +You may also lend copies, under the same conditions stated above, +and you may publicly display copies. + +@item +COPYING IN QUANTITY + +If you publish printed copies (or copies in media that commonly +have printed covers) of the Document, numbering more than 100, and +the Document’s license notice requires Cover Texts, you must +enclose the copies in covers that carry, clearly and legibly, all +these Cover Texts: Front-Cover Texts on the front cover, and +Back-Cover Texts on the back cover. Both covers must also clearly +and legibly identify you as the publisher of these copies. The +front cover must present the full title with all words of the title +equally prominent and visible. You may add other material on the +covers in addition. Copying with changes limited to the covers, as +long as they preserve the title of the Document and satisfy these +conditions, can be treated as verbatim copying in other respects. + +If the required texts for either cover are too voluminous to fit +legibly, you should put the first ones listed (as many as fit +reasonably) on the actual cover, and continue the rest onto +adjacent pages. + +If you publish or distribute Opaque copies of the Document +numbering more than 100, you must either include a machine-readable +Transparent copy along with each Opaque copy, or state in or with +each Opaque copy a computer-network location from which the general +network-using public has access to download using public-standard +network protocols a complete Transparent copy of the Document, free +of added material. If you use the latter option, you must take +reasonably prudent steps, when you begin distribution of Opaque +copies in quantity, to ensure that this Transparent copy will +remain thus accessible at the stated location until at least one +year after the last time you distribute an Opaque copy (directly or +through your agents or retailers) of that edition to the public. + +It is requested, but not required, that you contact the authors of +the Document well before redistributing any large number of copies, +to give them a chance to provide you with an updated version of the +Document. + +@item +MODIFICATIONS + +You may copy and distribute a Modified Version of the Document +under the conditions of sections 2 and 3 above, provided that you +release the Modified Version under precisely this License, with the +Modified Version filling the role of the Document, thus licensing +distribution and modification of the Modified Version to whoever +possesses a copy of it. In addition, you must do these things in +the Modified Version: + + +@enumerate A + +@item +Use in the Title Page (and on the covers, if any) a title +distinct from that of the Document, and from those of previous +versions (which should, if there were any, be listed in the +History section of the Document). You may use the same title as +a previous version if the original publisher of that version +gives permission. + +@item +List on the Title Page, as authors, one or more persons or +entities responsible for authorship of the modifications in the +Modified Version, together with at least five of the principal +authors of the Document (all of its principal authors, if it has +fewer than five), unless they release you from this requirement. + +@item +State on the Title page the name of the publisher of the +Modified Version, as the publisher. + +@item +Preserve all the copyright notices of the Document. + +@item +Add an appropriate copyright notice for your modifications +adjacent to the other copyright notices. + +@item +Include, immediately after the copyright notices, a license +notice giving the public permission to use the Modified Version +under the terms of this License, in the form shown in the +Addendum below. + +@item +Preserve in that license notice the full lists of Invariant +Sections and required Cover Texts given in the Document’s +license notice. + +@item +Include an unaltered copy of this License. + +@item +Preserve the section Entitled “History”, Preserve its Title, and +add to it an item stating at least the title, year, new authors, +and publisher of the Modified Version as given on the Title +Page. If there is no section Entitled “History” in the +Document, create one stating the title, year, authors, and +publisher of the Document as given on its Title Page, then add +an item describing the Modified Version as stated in the +previous sentence. + +@item +Preserve the network location, if any, given in the Document for +public access to a Transparent copy of the Document, and +likewise the network locations given in the Document for +previous versions it was based on. These may be placed in the +“History” section. You may omit a network location for a work +that was published at least four years before the Document +itself, or if the original publisher of the version it refers to +gives permission. + +@item +For any section Entitled “Acknowledgements” or “Dedications”, +Preserve the Title of the section, and preserve in the section +all the substance and tone of each of the contributor +acknowledgements and/or dedications given therein. + +@item +Preserve all the Invariant Sections of the Document, unaltered +in their text and in their titles. Section numbers or the +equivalent are not considered part of the section titles. + +@item +Delete any section Entitled “Endorsements”. Such a section may +not be included in the Modified Version. + +@item +Do not retitle any existing section to be Entitled +“Endorsements” or to conflict in title with any Invariant +Section. + +@item +Preserve any Warranty Disclaimers. +@end enumerate + +If the Modified Version includes new front-matter sections or +appendices that qualify as Secondary Sections and contain no +material copied from the Document, you may at your option designate +some or all of these sections as invariant. To do this, add their +titles to the list of Invariant Sections in the Modified Version’s +license notice. These titles must be distinct from any other +section titles. + +You may add a section Entitled “Endorsements”, provided it contains +nothing but endorsements of your Modified Version by various +parties—for example, statements of peer review or that the text +has been approved by an organization as the authoritative +definition of a standard. + +You may add a passage of up to five words as a Front-Cover Text, +and a passage of up to 25 words as a Back-Cover Text, to the end of +the list of Cover Texts in the Modified Version. Only one passage +of Front-Cover Text and one of Back-Cover Text may be added by (or +through arrangements made by) any one entity. If the Document +already includes a cover text for the same cover, previously added +by you or by arrangement made by the same entity you are acting on +behalf of, you may not add another; but you may replace the old +one, on explicit permission from the previous publisher that added +the old one. + +The author(s) and publisher(s) of the Document do not by this +License give permission to use their names for publicity for or to +assert or imply endorsement of any Modified Version. + +@item +COMBINING DOCUMENTS + +You may combine the Document with other documents released under +this License, under the terms defined in section 4 above for +modified versions, provided that you include in the combination all +of the Invariant Sections of all of the original documents, +unmodified, and list them all as Invariant Sections of your +combined work in its license notice, and that you preserve all +their Warranty Disclaimers. + +The combined work need only contain one copy of this License, and +multiple identical Invariant Sections may be replaced with a single +copy. If there are multiple Invariant Sections with the same name +but different contents, make the title of each such section unique +by adding at the end of it, in parentheses, the name of the +original author or publisher of that section if known, or else a +unique number. Make the same adjustment to the section titles in +the list of Invariant Sections in the license notice of the +combined work. + +In the combination, you must combine any sections Entitled +“History” in the various original documents, forming one section +Entitled “History”; likewise combine any sections Entitled +“Acknowledgements”, and any sections Entitled “Dedications”. You +must delete all sections Entitled “Endorsements.” + +@item +COLLECTIONS OF DOCUMENTS + +You may make a collection consisting of the Document and other +documents released under this License, and replace the individual +copies of this License in the various documents with a single copy +that is included in the collection, provided that you follow the +rules of this License for verbatim copying of each of the documents +in all other respects. + +You may extract a single document from such a collection, and +distribute it individually under this License, provided you insert +a copy of this License into the extracted document, and follow this +License in all other respects regarding verbatim copying of that +document. + +@item +AGGREGATION WITH INDEPENDENT WORKS + +A compilation of the Document or its derivatives with other +separate and independent documents or works, in or on a volume of a +storage or distribution medium, is called an “aggregate” if the +copyright resulting from the compilation is not used to limit the +legal rights of the compilation’s users beyond what the individual +works permit. When the Document is included in an aggregate, this +License does not apply to the other works in the aggregate which +are not themselves derivative works of the Document. + +If the Cover Text requirement of section 3 is applicable to these +copies of the Document, then if the Document is less than one half +of the entire aggregate, the Document’s Cover Texts may be placed +on covers that bracket the Document within the aggregate, or the +electronic equivalent of covers if the Document is in electronic +form. Otherwise they must appear on printed covers that bracket +the whole aggregate. + +@item +TRANSLATION + +Translation is considered a kind of modification, so you may +distribute translations of the Document under the terms of +section 4. Replacing Invariant Sections with translations requires +special permission from their copyright holders, but you may +include translations of some or all Invariant Sections in addition +to the original versions of these Invariant Sections. You may +include a translation of this License, and all the license notices +in the Document, and any Warranty Disclaimers, provided that you +also include the original English version of this License and the +original versions of those notices and disclaimers. In case of a +disagreement between the translation and the original version of +this License or a notice or disclaimer, the original version will +prevail. + +If a section in the Document is Entitled “Acknowledgements”, +“Dedications”, or “History”, the requirement (section 4) to +Preserve its Title (section 1) will typically require changing the +actual title. + +@item +TERMINATION + +You may not copy, modify, sublicense, or distribute the Document +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense, or distribute it is void, +and will automatically terminate your rights under this License. + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the +copyright holder fails to notify you of the violation by some +reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from +that copyright holder, and you cure the violation prior to 30 days +after your receipt of the notice. + +Termination of your rights under this section does not terminate +the licenses of parties who have received copies or rights from you +under this License. If your rights have been terminated and not +permanently reinstated, receipt of a copy of some or all of the +same material does not give you any rights to use it. + +@item +FUTURE REVISIONS OF THIS LICENSE +@end enumerate + +@quotation + +The Free Software Foundation may publish new, revised versions of +the GNU Free Documentation License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. See +@indicateurl{http://www.gnu.org/copyleft}. + +Each version of the License is given a distinguishing version +number. If the Document specifies that a particular numbered +version of this License “or any later version” applies to it, you +have the option of following the terms and conditions either of +that specified version or of any later version that has been +published (not as a draft) by the Free Software Foundation. If the +Document does not specify a version number of this License, you may +choose any version ever published (not as a draft) by the Free +Software Foundation. If the Document specifies that a proxy can +decide which future versions of this License can be used, that +proxy’s public statement of acceptance of a version permanently +authorizes you to choose that version for the Document. +@end quotation + + +@enumerate 11 + +@item +RELICENSING +@end enumerate + +@quotation + +“Massive Multiauthor Collaboration Site” (or “MMC Site”) means any +World Wide Web server that publishes copyrightable works and also +provides prominent facilities for anybody to edit those works. A +public wiki that anybody can edit is an example of such a server. +A “Massive Multiauthor Collaboration” (or “MMC”) contained in the +site means any set of copyrightable works thus published on the MMC +site. + +“CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0 +license published by Creative Commons Corporation, a not-for-profit +corporation with a principal place of business in San Francisco, +California, as well as future copyleft versions of that license +published by that same organization. + +“Incorporate” means to publish or republish a Document, in whole or +in part, as part of another Document. + +An MMC is “eligible for relicensing” if it is licensed under this +License, and if all works that were first published under this +License somewhere other than this MMC, and subsequently +incorporated in whole or in part into the MMC, (1) had no cover +texts or invariant sections, and (2) were thus incorporated prior +to November 1, 2008. + +The operator of an MMC Site may republish an MMC contained in the +site under CC-BY-SA on the same site at any time before August 1, +2009, provided the MMC is eligible for relicensing. +@end quotation + + +@node Emacs lisp functions and variables,,The GNU Free Documentation License,Top +@unnumbered Emacs lisp functions and variables + + +@menu +* evil-add-command-properties: 0. +* evil-auto-balance-windows: 1. +* evil-auto-indent: 2. +* evil-backspace-join-lines: 3. +* evil-bigword: 4. +* evil-buffer-regexps: 5. +* evil-complete-all-buffers: 6. +* evil-cross-lines: 7. +* evil-declare-change-repeat: 8. +* evil-declare-motion: 9. +* evil-declare-not-repeat: a. +* evil-declare-repeat: b. +* evil-default-cursor: c. +* evil-default-state: d. +* evil-define-command: e. +* evil-define-key: f. +* evil-define-motion: 10. +* evil-define-operator: 11. +* evil-define-state: 12. +* evil-define-text-object: 13. +* evil-define-type: 14. +* evil-disable-insert-state-bindings: 15. +* evil-echo-state: 16. +* evil-esc-delay: 17. +* evil-ex-hl-update-delay: 18. +* evil-flash-delay: 19. +* evil-get-command-properties: 1a. +* evil-get-command-property: 1b. +* evil-global-set-key: 1c. +* evil-highlight-closing-paren-at-point-states: 1d. +* evil-indent-convert-tabs: 1e. +* evil-intercept-esc: 1f. +* evil-kbd-macro-suppress-motion-error: 20. +* evil-kill-on-visual-paste: 21. +* evil-local-set-key: 22. +* evil-mode-line-format: 23. +* evil-mouse-word: 24. +* evil-move-beyond-eol: 25. +* evil-move-cursor-back: 26. +* evil-regexp-search: 27. +* evil-repeat-move-cursor: 28. +* evil-respect-visual-line-mode: 29. +* evil-search-module: 2a. +* evil-search-wrap: 2b. +* evil-select-an-object: 2c. +* evil-select-inner-object: 2d. +* evil-select-paren: 2e. +* evil-set-command-properties: 2f. +* evil-set-initial-state: 30. +* evil-set-leader: 31. +* evil-shift-round: 32. +* evil-shift-width: 33. +* evil-show-paren-range: 34. +* evil-split-window-below: 35. +* evil-start-of-line: 36. +* evil-toggle-key: 37. +* evil-track-eol: 38. +* evil-undo-system: 39. +* evil-vsplit-window-right: 3a. +* evil-want-C-d-scroll: 3b. +* evil-want-C-i-jump: 3c. +* evil-want-C-u-delete: 3d. +* evil-want-C-u-scroll: 3e. +* evil-want-C-w-delete: 3f. +* evil-want-C-w-in-emacs-state: 40. +* evil-want-empty-ex-last-command: 41. +* evil-want-fine-undo: 42. +* evil-want-Y-yank-to-eol: 43. +@end menu + + +@c %**end of body +@bye |