There are a ton of good org-mode guides, and lots of evil-mode documentation, but here is a quick guide to get up and running with a vim-emulating editor. We’ll even apply those text editing abilities to channel the organizational power of Emacs’ org-mode.
First, we’ll install evil mode. These install instructions were taken from the Emacs wiki:
Install using the latest version of Emacs and its builtin package system. Start by adding this in your ‘~/.emacs’:
(require 'package) (push '("marmalade" . "http://marmalade-repo.org/packages/") package-archives ) (push '("melpa" . "http://melpa.milkbox.net/packages/") package-archives)
Then execute the following commands in your Emacs minibuffer, located at the bottom of the window:
M-x list-packages C-s evil
C-s to select the Evil package and press enter. Follow the prompt to install. Note that
M stands for meta, which is the
C means the
The latest stable version of Evil-mode is available from the Marmalade repository, which you have just fetched and installed.
After installation, add the following to your
~/.emacs config file. Alternatively, you can add the code into
~/.emacs.d/init.el and delete
~/.emacs if you want a more scalable config:
Feel free to download the file here:
Here is the Elisp code (it will look prettier in your buffer!):
;; Basic evil-mode and org-mode config to get started ;; Include this in your Emacs config file (ie ~/.emacs.d/init.el or ~/.emacs) (require 'evil) ;; Enable Evil mode as defuault (evil-mode 1) ;; Treat wrapped line scrolling as single lines (define-key evil-normal-state-map (kbd "j") 'evil-next-visual-line) (define-key evil-normal-state-map (kbd "k") 'evil-previous-visual-line) ;;; esc quits pretty much anything (like pending prompts in the minibuffer) (define-key evil-normal-state-map [escape] 'keyboard-quit) (define-key evil-visual-state-map [escape] 'keyboard-quit) (define-key minibuffer-local-map [escape] 'minibuffer-keyboard-quit) (define-key minibuffer-local-ns-map [escape] 'minibuffer-keyboard-quit) (define-key minibuffer-local-completion-map [escape] 'minibuffer-keyboard-quit) (define-key minibuffer-local-must-match-map [escape] 'minibuffer-keyboard-quit) (define-key minibuffer-local-isearch-map [escape] 'minibuffer-keyboard-quit) ;; Enable smash escape (ie 'jk' and 'kj' quickly to exit insert mode) (define-key evil-insert-state-map "k" #'cofi/maybe-exit-kj) (evil-define-command cofi/maybe-exit-kj () :repeat change (interactive) (let ((modified (buffer-modified-p))) (insert "k") (let ((evt (read-event (format "Insert %c to exit insert state" ?j) nil 0.5))) (cond ((null evt) (message "")) ((and (integerp evt) (char-equal evt ?j)) (delete-char -1) (set-buffer-modified-p modified) (push 'escape unread-command-events)) (t (setq unread-command-events (append unread-command-events (list evt)))))))) (define-key evil-insert-state-map "j" #'cofi/maybe-exit-jk) (evil-define-command cofi/maybe-exit-jk () :repeat change (interactive) (let ((modified (buffer-modified-p))) (insert "j") (let ((evt (read-event (format "Insert %c to exit insert state" ?k) nil 0.5))) (cond ((null evt) (message "")) ((and (integerp evt) (char-equal evt ?k)) (delete-char -1) (set-buffer-modified-p modified) (push 'escape unread-command-events)) (t (setq unread-command-events (append unread-command-events (list evt)))))))) ;; ORG MODE ;; auto-indent an org-mode file (add-hook 'org-mode-hook (lambda() (local-set-key (kbd "C-c C-c") 'org-table-align) (local-set-key (kbd "C-c C-f") 'org-table-calc-current-TBLFM) (org-indent-mode t)))
To refresh your config, have your config file open and run
M-x eval-buffer. Or just restart emacs (save in Emacs via
C-x C-s and close via
You can toggle evil and org modes with
M-x org-mode and
M-x evil-mode respectively.
After that, create any
.org file and you should have a vim-emulated editor in org-mode!
Let’s create a sample org-file to try out our evil-mode editing on an org-mode file. To test an example org-file, execute
C-x C-f, type in a filepath, ie
~/test/sample-org-file.org, and add these contents to it:
Feel free to download the file above and copy/paste it into your new
You should now be feeling the power of Vim and Org-mode! You might even experience why they call it
For further tips and tricks, feel free to check out the org mode docs. Just remember, the applications with org-mode are extremely expansive. For example, if you are inclined, you can even use it to log your hours and invoice clients from a latex template!