doomemacs/core/core-evil.el

210 lines
7.3 KiB
EmacsLisp
Raw Normal View History

2015-06-06 18:40:33 +08:00
;;; core-evil.el --- the root of all evil
2015-06-15 15:05:52 +08:00
;; see lib/evil-defuns.el
2015-06-06 18:40:33 +08:00
2015-06-05 06:23:21 +08:00
(use-package evil
:init
;; Speed up show-paren outside of normal mode (where my motions are minimal)
(add-hook! evil-normal-state-entry (setq show-paren-delay 0.075))
(add-hook! evil-normal-state-exit (setq show-paren-delay 0))
2015-06-06 18:40:33 +08:00
;; Disable highlights on insert-mode
2015-06-15 15:05:52 +08:00
(add-hook! evil-insert-state-entry 'evil-ex-nohighlight)
2015-10-08 13:46:19 +08:00
;; Prevents "matches )" messages in minibuffer
(add-hook! evil-insert-state-entry (setq-default blink-matching-paren t))
(add-hook! evil-insert-state-exit (setq-default blink-matching-paren nil))
2015-06-06 18:40:33 +08:00
;; Always ensure evil-shift-width is consistent with tab-width
2015-06-15 15:05:52 +08:00
(add-hook! evil-local-mode (setq evil-shift-width tab-width))
2015-06-05 06:23:21 +08:00
:config
2015-06-06 18:40:33 +08:00
(setq evil-magic t
evil-want-C-u-scroll t ; enable C-u for scrolling
evil-ex-visual-char-range t ; column range for ex commands
evil-want-fine-undo nil
2015-07-03 06:26:27 +08:00
evil-want-visual-char-semi-exclusive t
2015-06-06 18:40:33 +08:00
evil-ex-search-vim-style-regexp t
evil-ex-interactive-search-highlight 'selected-window
;; Color-coded state cursors
evil-normal-state-cursor '("white" box)
evil-emacs-state-cursor '("cyan" bar)
evil-insert-state-cursor '("white" bar)
evil-visual-state-cursor '("white" hollow)
evil-iedit-state-cursor '("orange" box))
(evil-mode 1)
(evil-select-search-module 'evil-search-module 'evil-search)
2015-06-15 15:05:52 +08:00
(bind! :map evil-command-window-mode-map :n [escape] 'kill-buffer-and-window)
2015-06-06 18:40:33 +08:00
;; modes to map to different default states
(dolist (mode-map '((cider-repl-mode . emacs)
(comint-mode . emacs)
(term-mode . emacs)
(help-mode . normal)
(message-mode . normal)
2015-09-29 21:53:45 +08:00
(compilation-mode . normal)))
2015-06-06 18:40:33 +08:00
(evil-set-initial-state `,(car mode-map) `,(cdr mode-map)))
(progn ; evil hacks
(defadvice evil-force-normal-state (before evil-esc-quit activate)
(ignore-errors
2015-10-07 08:27:18 +08:00
(popwin:close-popup-window) ; close popups, if any
2015-06-06 18:40:33 +08:00
(evil-ex-nohighlight)
;; Exit minibuffer if alive
(if (minibuffer-window-active-p (minibuffer-window))
(narf/minibuffer-quit))))
;; Jump to new splits
(defadvice evil-window-split (after evil-window-split-jump activate)
(evil-window-down 1))
(defadvice evil-window-vsplit (after evil-window-vsplit-jump activate)
(evil-window-right 1))
2015-09-29 21:53:45 +08:00
;; Restore vimmish ex-mode keymaps in isearch
2015-06-15 15:05:52 +08:00
;; Hide keystroke display while isearch is active
(add-hook! isearch-mode (setq echo-keystrokes 0))
(add-hook! isearch-mode-end (setq echo-keystrokes 0.02))
2015-06-24 21:38:10 +08:00
(bind! :map evil-ex-search-keymap
2015-09-29 21:53:45 +08:00
"C-w" 'evil-delete-backward-word
"C-u" 'evil-delete-whole-line)))
2015-06-15 15:05:52 +08:00
;; evil plugins
(use-package evil-anzu)
(use-package evil-commentary
:diminish evil-commentary-mode
:commands (evil-commentary
evil-commentary-yank
evil-commentary-line)
:config (evil-commentary-mode 1))
(use-package evil-ex-registers
:commands (evil-get-spec-register
evil-ex-paste-from-register))
(use-package evil-exchange
:commands evil-exchange
:config
2015-07-26 19:14:31 +08:00
(advice-add 'evil-force-normal-state :after 'narf*evil-exchange-off))
2015-06-15 15:05:52 +08:00
(use-package evil-iedit-state
:functions (iedit-current-occurrence-string iedit-restrict-region)
:commands (evil-iedit-state evil-iedit-state/iedit-mode)
:config
2015-10-01 01:47:57 +08:00
(bind! :v "SPC" 'narf:iedit-restrict-to-region
(:map evil-iedit-state-map
;; Don't interfere with evil-snipe
"s" nil
"S" nil
"V" 'evil-visual-line
"C" 'evil-iedit-state/substitute ; instead of s/S
"za" 'iedit-toggle-unmatched-lines-visible)))
2015-06-15 15:05:52 +08:00
(use-package evil-indent-textobject
:commands (evil-indent-i-indent
evil-indent-a-indent
evil-indent-a-indent-lines)
:init
(bind! :map evil-inner-text-objects-map
"i" 'evil-indent-i-indent
"i" 'evil-indent-a-indent
"I" 'evil-indent-a-indent-lines))
2015-06-05 06:23:21 +08:00
2015-06-15 15:05:52 +08:00
(use-package evil-jumper
:init
(setq evil-jumper-file (! (concat narf-temp-dir "jumplist"))
evil-jumper-auto-center t
evil-jumper-auto-save-interval 3600))
(use-package evil-matchit
2015-10-07 08:27:18 +08:00
:defer 1
2015-06-15 15:05:52 +08:00
:commands (evilmi-jump-items global-evil-matchit-mode)
:config (global-evil-matchit-mode 1))
2015-08-22 00:40:04 +08:00
(use-package evil-easymotion
2015-10-07 08:27:18 +08:00
:defer 1
2015-08-22 00:40:04 +08:00
:config
(evilem-default-keybindings "g SPC")
(evilem-define (kbd "g SPC n") 'evil-ex-search-next)
(evilem-define (kbd "g SPC N") 'evil-ex-search-previous)
2015-08-22 00:40:04 +08:00
(evilem-define (kbd "g s") 'evil-snipe-repeat
(lambda ()
(save-excursion
(ignore-errors
(call-interactively #'evil-snipe-s))))
nil
((evil-snipe-enable-highlight)
(evil-snipe-enable-incremental-highlight)))
(evilem-define (kbd "g S") 'evil-snipe-repeat-reverse
(lambda ()
(save-excursion
(ignore-errors
(call-interactively #'evil-snipe-s))))
nil
((evil-snipe-enable-highlight)
(evil-snipe-enable-incremental-highlight))))
2015-06-15 15:05:52 +08:00
(use-package evil-numbers
2015-10-01 01:47:57 +08:00
:commands (evil-numbers/inc-at-pt evil-numbers/dec-at-pt))
2015-06-15 15:05:52 +08:00
(use-package evil-search-highlight-persist
2015-07-26 19:14:31 +08:00
:config
(global-evil-search-highlight-persist t)
(advice-add 'evil-force-normal-state :after 'evil-search-highlight-persist-remove-all))
2015-06-15 15:05:52 +08:00
(use-package evil-snipe
:diminish evil-snipe-mode
:init
(setq-default
evil-snipe-smart-case t
2015-09-29 21:53:45 +08:00
evil-snipe-repeat-keys nil ; using evil-space to repeat
2015-06-15 15:05:52 +08:00
evil-snipe-scope 'line
evil-snipe-repeat-scope 'buffer
2015-09-29 21:53:45 +08:00
evil-snipe-override-evil-repeat-keys nil ; causes problems with remapped ;
2015-06-15 15:05:52 +08:00
evil-snipe-symbol-groups '((?\[ "[[{(]")
(?\] "[]})]")))
:config
2015-06-15 15:05:52 +08:00
(evil-snipe-mode 1)
(evil-snipe-override-mode 1))
(use-package evil-space
2015-10-07 08:27:18 +08:00
:defer 1
2015-06-15 15:05:52 +08:00
:diminish (evil-space-mode . "_")
:init (setq evil-space-auto-setup nil)
:config
(evil-space-mode 1)
(evil-space-setup "/" "n" "N")
(evil-space-setup "?" "N" "n")
(after! evil-snipe
2015-10-01 01:47:57 +08:00
(evil-space-setup 'evil-snipe-f 'evil-snipe-repeat 'evil-snipe-repeat-reverse)
(evil-space-setup 'evil-snipe-F 'evil-snipe-repeat 'evil-snipe-repeat-reverse)
(evil-space-setup 'evil-snipe-t 'evil-snipe-repeat 'evil-snipe-repeat-reverse)
(evil-space-setup 'evil-snipe-T 'evil-snipe-repeat 'evil-snipe-repeat-reverse)
(evil-space-setup 'evil-snipe-s 'evil-snipe-repeat 'evil-snipe-repeat-reverse)
(evil-space-setup 'evil-snipe-S 'evil-snipe-repeat 'evil-snipe-repeat-reverse))
2015-06-15 15:05:52 +08:00
(after! evil-visualstar
(evil-space-setup 'evil-visualstar/begin-search-forward "n" "N")
(evil-space-setup 'evil-visualstar/begin-search-backward "n" "N")))
(use-package evil-surround
:commands (global-evil-surround-mode
evil-surround-edit
evil-Surround-edit
evil-surround-region)
:config
(global-evil-surround-mode 1)
;; Escaped surround characters
(push '(?\\ . narf/evil-surround-escaped) evil-surround-pairs-alist))
(use-package evil-visualstar
:commands (global-evil-visualstar-mode
evil-visualstar/begin-search
evil-visualstar/begin-search-forward
evil-visualstar/begin-search-backward)
:config
(global-evil-visualstar-mode 1))
2015-06-05 06:23:21 +08:00
(provide 'core-evil)
;;; core-evil.el ends here