<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.55.54.38</id>
	<title>WikEmacs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wikemacs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=192.55.54.38"/>
	<link rel="alternate" type="text/html" href="https://wikemacs.org/wiki/Special:Contributions/192.55.54.38"/>
	<updated>2026-04-25T12:42:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wikemacs.org/index.php?title=Evil&amp;diff=46371</id>
		<title>Evil</title>
		<link rel="alternate" type="text/html" href="https://wikemacs.org/index.php?title=Evil&amp;diff=46371"/>
		<updated>2013-11-28T10:20:23Z</updated>

		<summary type="html">&lt;p&gt;192.55.54.38: save if buffer has a filename&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Evil''' is an '''e'''xtensible '''vi''' '''l'''ayer for Emacs. It provides Vim features like Visual selection and text objects, and is the successor to the now defunct vimpulse and vim-mode.&lt;br /&gt;
&lt;br /&gt;
=== Quick install ===&lt;br /&gt;
&lt;br /&gt;
Evil comes prebuilt in emacs24. &lt;br /&gt;
In Emacs23, Evil can be downloaded and installed using [[el-get]] with: M-x el-get-install RET evil RET.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
Alternatively, Evil lives in a Git repository. To download Evil, do:&lt;br /&gt;
&lt;br /&gt;
 git clone git://gitorious.org/evil/evil.git&lt;br /&gt;
&lt;br /&gt;
If you don't have Git, just head over to [https://gitorious.org/evil/evil/commits/master Gitorious] and click the ''&amp;quot;Download master as tar.gz&amp;quot;'' link (extract with ##tar -xzf master.tar.gz##).&lt;br /&gt;
&lt;br /&gt;
=== Install ===&lt;br /&gt;
&lt;br /&gt;
If you installed it manually, move Evil to ~/.emacs.d/evil (or somewhere else in your ##load-path##). &lt;br /&gt;
In any case, add the following lines to ~/.emacs:&lt;br /&gt;
&lt;br /&gt;
 (add-to-list 'load-path &amp;quot;~/.emacs.d/evil&amp;quot;) ;;no need with 24&lt;br /&gt;
 (require 'evil)&lt;br /&gt;
 (evil-mode 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Evil requires [UndoTree undo-tree.el] in the load-path for linear undo and undo branches. Otherwise, Evil uses regular Emacs undo.&lt;br /&gt;
&lt;br /&gt;
=== Documentation ===&lt;br /&gt;
&lt;br /&gt;
A brief [https://gitorious.org/evil/evil/blobs/raw/doc/doc/evil.pdf PDF manual] is available in the /doc subdirectory.&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
One thing I would recommend to any ex vimmer is to make  escape to quit actually pretty much anything (like pending prompts in the minibuffer):&lt;br /&gt;
&lt;br /&gt;
    ;;; esc quits&lt;br /&gt;
    (define-key evil-normal-state-map [escape] 'keyboard-quit)&lt;br /&gt;
    (define-key evil-visual-state-map [escape] 'keyboard-quit)&lt;br /&gt;
    (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit)&lt;br /&gt;
    (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit)&lt;br /&gt;
    (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit)&lt;br /&gt;
    (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit)&lt;br /&gt;
    (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit)&lt;br /&gt;
&lt;br /&gt;
The following makes you loose vim commands, but gives you back basic emacs commands, like C-y to paste in insert mode or C-r to search backward:&lt;br /&gt;
&lt;br /&gt;
    (define-key evil-normal-state-map &amp;quot;\C-y&amp;quot; 'yank)&lt;br /&gt;
    (define-key evil-insert-state-map &amp;quot;\C-y&amp;quot; 'yank)&lt;br /&gt;
    (define-key evil-visual-state-map &amp;quot;\C-y&amp;quot; 'yank)&lt;br /&gt;
    (define-key evil-insert-state-map &amp;quot;\C-e&amp;quot; 'end-of-line)&lt;br /&gt;
    (define-key evil-normal-state-map &amp;quot;\C-w&amp;quot; 'evil-delete)&lt;br /&gt;
    (define-key evil-insert-state-map &amp;quot;\C-w&amp;quot; 'evil-delete)&lt;br /&gt;
    (define-key evil-insert-state-map &amp;quot;\C-r&amp;quot; 'search-backward)&lt;br /&gt;
    (define-key evil-visual-state-map &amp;quot;\C-w&amp;quot; 'evil-delete)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In insert mode, Evil uses linear undo. If you want fine grain undo:&lt;br /&gt;
&lt;br /&gt;
    (setq evil-want-fine-undo t)&lt;br /&gt;
&lt;br /&gt;
but remember, we shouldn't stay long in insert mode.&lt;br /&gt;
&lt;br /&gt;
If you'd like to type jj or jk in insert mode to go back to normal mode, you may use [[key-chord]]:&lt;br /&gt;
&lt;br /&gt;
    (key-chord-define evil-insert-state-map &amp;quot;jj&amp;quot; 'evil-normal-state)&lt;br /&gt;
&lt;br /&gt;
'''Note''': I still load evil with M-x, I didn't set (evil-mode 1), so in order to tweak keybindings I had to enclose them in a hook, so that my config is called when evil is called:&lt;br /&gt;
&lt;br /&gt;
    (add-hook 'evil-after-load-hook&lt;br /&gt;
          (lambda ()&lt;br /&gt;
          ;; config&lt;br /&gt;
     ))&lt;br /&gt;
&lt;br /&gt;
==== Hooks ====&lt;br /&gt;
&lt;br /&gt;
There are some hooks that allow to do things when we enter or exit a mode (see the pdf manual).&lt;br /&gt;
&lt;br /&gt;
For example, to save the buffer when we exit the insert mode:&lt;br /&gt;
&lt;br /&gt;
    (defun my-save-if-bufferfilename ()&lt;br /&gt;
      (if (buffer-file-name)&lt;br /&gt;
          (progn&lt;br /&gt;
            (save-buffer)&lt;br /&gt;
            )&lt;br /&gt;
        (message &amp;quot;no file is associated to this buffer: do nothing&amp;quot;)&lt;br /&gt;
        )&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    (add-hook 'evil-insert-state-exit-hook 'my-save-if-bufferfilename)&lt;br /&gt;
&lt;br /&gt;
=== Articles ===&lt;br /&gt;
&lt;br /&gt;
* [http://dnquark.com/blog/2012/02/emacs-evil-ecumenicalism/ Emacs Evil Ecumenicalism]&lt;br /&gt;
&lt;br /&gt;
=== Plug-ins ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/timcharper/evil-surround evil-surround]: Port of Vim's surround script.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cofi/evil-numbers evil-numbers]: Vim-like increment and decrement.&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/cofi/evil-leader evil-leader]: Port of Vim's mapleader.&lt;br /&gt;
&lt;br /&gt;
* [[ace-jump]]: Port of Vim's Easy-motion&lt;br /&gt;
&lt;br /&gt;
=== Bug tracker ===&lt;br /&gt;
&lt;br /&gt;
The bugtrucker can be found on [https://bitbucket.org/lyro/evil/issues?status=new&amp;amp;status=open Bitbucket].&lt;br /&gt;
[[Category:Vi User]] [[Category:Vim User]]&lt;/div&gt;</summary>
		<author><name>192.55.54.38</name></author>
	</entry>
</feed>