2015-06-06 06:40:33 -04:00
|
|
|
;;; core-evil.el --- the root of all evil
|
|
|
|
|
2015-06-04 18:23:21 -04:00
|
|
|
(use-package evil
|
|
|
|
:init
|
2015-10-15 14:01:53 -04:00
|
|
|
;; highlight matching delimiters where it's important
|
|
|
|
(defun show-paren-mode-off () (show-paren-mode -1))
|
2016-02-18 05:04:15 -05:00
|
|
|
(add-hook 'evil-insert-state-entry-hook 'show-paren-mode)
|
|
|
|
(add-hook 'evil-insert-state-exit-hook 'show-paren-mode-off)
|
|
|
|
(add-hook 'evil-visual-state-entry-hook 'show-paren-mode)
|
|
|
|
(add-hook 'evil-visual-state-exit-hook 'show-paren-mode-off)
|
|
|
|
(add-hook 'evil-motion-state-entry-hook 'show-paren-mode)
|
|
|
|
(add-hook 'evil-motion-state-exit-hook 'show-paren-mode-off)
|
|
|
|
(add-hook 'evil-operator-state-entry-hook 'show-paren-mode)
|
|
|
|
(add-hook 'evil-operator-state-exit-hook 'show-paren-mode-off)
|
2015-10-15 14:01:53 -04:00
|
|
|
|
|
|
|
;; Disable highlights on insert-mode
|
2016-04-05 23:58:32 -04:00
|
|
|
(add-hook 'evil-insert-state-entry-hook 'evil-ex-nohighlight)
|
2015-06-04 18:23:21 -04:00
|
|
|
:config
|
2016-01-22 19:34:14 -05:00
|
|
|
(setq-default
|
|
|
|
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-visual-char-semi-exclusive t
|
|
|
|
evil-ex-search-vim-style-regexp t
|
|
|
|
evil-ex-interactive-search-highlight 'selected-window
|
|
|
|
evil-echo-state nil
|
|
|
|
evil-ex-substitute-global t
|
|
|
|
evil-insert-skip-empty-lines t
|
2015-12-23 02:40:41 -05:00
|
|
|
|
2016-01-22 19:34:14 -05:00
|
|
|
evil-normal-state-tag "N"
|
|
|
|
evil-insert-state-tag "I"
|
|
|
|
evil-visual-state-tag "V"
|
|
|
|
evil-emacs-state-tag "E"
|
|
|
|
evil-operator-state-tag "O"
|
|
|
|
evil-motion-state-tag "M"
|
|
|
|
evil-replace-state-tag "R"
|
2015-11-25 06:00:49 -05:00
|
|
|
|
2016-01-22 19:34:14 -05:00
|
|
|
;; Color-coded state cursors
|
|
|
|
evil-default-cursor "orange"
|
|
|
|
evil-normal-state-cursor 'box
|
|
|
|
evil-emacs-state-cursor '("cyan" box)
|
|
|
|
evil-insert-state-cursor 'bar
|
2016-02-18 05:05:03 -05:00
|
|
|
evil-visual-state-cursor 'hollow)
|
2015-06-06 06:40:33 -04:00
|
|
|
|
2016-01-27 20:08:00 -05:00
|
|
|
;; NOTE: a bug in emacs 25 breaks undoing in evil. See
|
|
|
|
;; https://bitbucket.org/lyro/evil/issues/594/undo-doesnt-behave-like-vim
|
|
|
|
(setq-default evil-want-fine-undo (if (> emacs-major-version 24) 'fine 'no))
|
|
|
|
|
2015-06-06 06:40:33 -04:00
|
|
|
(evil-mode 1)
|
|
|
|
(evil-select-search-module 'evil-search-module 'evil-search)
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2015-10-28 03:31:51 -04:00
|
|
|
(evil-define-key 'normal evil-command-window-mode-map [escape] 'kill-buffer-and-window)
|
2015-06-06 06:40:33 -04:00
|
|
|
|
|
|
|
;; modes to map to different default states
|
2015-12-23 02:40:41 -05:00
|
|
|
(dolist (mode-map '((compilation-mode . normal)
|
|
|
|
(help-mode . normal)
|
|
|
|
(message-mode . normal)
|
|
|
|
(debugger-mode . normal)
|
|
|
|
(profile-report-mode . emacs)
|
|
|
|
(Info-mode . emacs)
|
|
|
|
(view-mode . emacs)
|
|
|
|
(comint-mode . emacs)
|
|
|
|
(cider-repl-mode . emacs)
|
|
|
|
(term-mode . emacs)
|
|
|
|
(calendar-mode . emacs)
|
|
|
|
(Man-mode . emacs)
|
|
|
|
(grep-mode . emacs)
|
|
|
|
(image-mode . normal)
|
2016-03-01 01:59:36 -05:00
|
|
|
(doc-view-mode . normal)
|
2015-11-25 06:00:49 -05:00
|
|
|
))
|
2015-06-06 06:40:33 -04:00
|
|
|
(evil-set-initial-state `,(car mode-map) `,(cdr mode-map)))
|
|
|
|
|
2015-12-06 22:57:03 -05:00
|
|
|
;; Shortcuts for the evil expression register
|
|
|
|
(defmacro $= (str &rest args)
|
|
|
|
`(calc-eval (format ,str ,@args)))
|
|
|
|
(defmacro $r (char)
|
|
|
|
`(evil-get-register ,char))
|
|
|
|
(defmacro $expand (path)
|
|
|
|
`(evil-ex-replace-special-filenames ,path))
|
|
|
|
|
2015-12-11 16:51:04 -05:00
|
|
|
;; buffer-local ex commands, thanks to:
|
|
|
|
;; http://emacs.stackexchange.com/questions/13186
|
|
|
|
(defun evil-ex-define-cmd-local (cmd function)
|
|
|
|
"Locally binds the function FUNCTION to the command CMD."
|
|
|
|
(unless (local-variable-p 'evil-ex-commands)
|
|
|
|
(setq-local evil-ex-commands (copy-alist evil-ex-commands)))
|
|
|
|
(evil-ex-define-cmd cmd function))
|
|
|
|
;; Shortcuts for `evil-ex-define-cmd'
|
2016-01-30 21:16:10 -05:00
|
|
|
(defalias 'exmap 'evil-ex-define-cmd)
|
2015-12-11 16:51:04 -05:00
|
|
|
(defalias 'exmap! 'evil-ex-define-cmd-local)
|
|
|
|
|
2015-06-06 06:40:33 -04:00
|
|
|
(progn ; evil hacks
|
2015-10-28 03:31:51 -04:00
|
|
|
(defadvice evil-force-normal-state (after evil-esc-quit activate)
|
2015-11-19 05:55:21 -05:00
|
|
|
"Close popups, disable search highlights and quit the minibuffer if open."
|
2015-12-23 02:40:41 -05:00
|
|
|
(when (minibuffer-window-active-p (minibuffer-window))
|
|
|
|
(narf-minibuffer-quit))
|
2015-06-06 06:40:33 -04:00
|
|
|
(ignore-errors
|
2015-11-17 02:04:05 -05:00
|
|
|
(evil-ex-nohighlight))
|
2016-02-19 12:34:33 -05:00
|
|
|
;; Close non-repl popups and clean up `narf-popup-windows'
|
2016-04-19 03:12:25 -04:00
|
|
|
(unless (memq (get-buffer-window) narf-popup-windows)
|
|
|
|
(mapc (lambda (w)
|
|
|
|
(if (window-live-p w)
|
|
|
|
(with-selected-window w
|
|
|
|
(unless (derived-mode-p 'comint-mode)
|
|
|
|
(narf/popup-close w)))
|
|
|
|
(narf--popup-remove w)))
|
|
|
|
narf-popup-windows)))
|
2015-11-17 02:04:05 -05:00
|
|
|
|
2016-04-10 18:47:07 -04:00
|
|
|
;; Fix disruptive errors w/ hidden buffers caused by workgroups killing windows
|
|
|
|
;; TODO Delete timer on dead windows
|
|
|
|
(defadvice evil-ex-hl-do-update-highlight (around evil-ex-hidden-buffer-ignore-errors activate)
|
|
|
|
(ignore-errors ad-do-it))
|
|
|
|
|
2015-06-15 09:05:52 +02: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-10-28 03:31:51 -04:00
|
|
|
(let ((map evil-ex-search-keymap))
|
2015-11-17 02:04:05 -05:00
|
|
|
(define-key map "\C-w" 'backward-kill-word)
|
2015-11-09 15:55:03 -05:00
|
|
|
(define-key map "\C-u" 'evil-delete-whole-line))
|
2015-10-28 03:31:51 -04:00
|
|
|
|
2015-10-25 00:39:22 -04:00
|
|
|
;; Repeat motions with SPC/S-SPC
|
|
|
|
(defmacro narf-space-setup! (command next-func prev-func)
|
|
|
|
`(defadvice ,command
|
|
|
|
(before ,(intern (format "narf-space--%s" (symbol-name command))) activate)
|
|
|
|
(define-key evil-motion-state-map (kbd "SPC") ',next-func)
|
|
|
|
(define-key evil-motion-state-map (kbd "S-SPC") ',prev-func)))
|
|
|
|
|
|
|
|
(after! evil-snipe
|
|
|
|
(narf-space-setup! evil-snipe-f evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-F evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-t evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-T evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-s evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-S evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-x evil-snipe-repeat evil-snipe-repeat-reverse)
|
|
|
|
(narf-space-setup! evil-snipe-X evil-snipe-repeat evil-snipe-repeat-reverse))
|
|
|
|
|
|
|
|
(after! evil-visualstar
|
|
|
|
(narf-space-setup! evil-visualstar/begin-search-forward evil-ex-search-next evil-ex-search-previous)
|
|
|
|
(narf-space-setup! evil-visualstar/begin-search-backward evil-ex-search-previous evil-ex-search-next))
|
|
|
|
|
|
|
|
(narf-space-setup! evil-ex-search-next evil-ex-search-next evil-ex-search-previous)
|
|
|
|
(narf-space-setup! evil-ex-search-previous evil-ex-search-next evil-ex-search-previous)
|
|
|
|
|
|
|
|
(narf-space-setup! evil-ex-search-forward evil-ex-search-next evil-ex-search-previous)
|
2015-11-17 02:04:30 -05:00
|
|
|
(narf-space-setup! evil-ex-search-backward evil-ex-search-next evil-ex-search-previous)
|
|
|
|
|
|
|
|
;; A monkey patch to add several substitutions to evil-mode's ex commandline
|
|
|
|
;; other than % and #...
|
|
|
|
;;
|
|
|
|
;; % => full path to file (/project/src/thing.c)
|
|
|
|
;; # => alternative file path (/project/include/thing.h)
|
|
|
|
;; %:p => path to project root (/project/)
|
|
|
|
;; %:d => path to current directory (/project/src/)
|
|
|
|
;; %:e => the file's extension (c)
|
|
|
|
;; %:r => the full path without its extension (/project/src/thing)
|
|
|
|
;; %:t => the file's basename (thing.c)
|
|
|
|
;;
|
|
|
|
;; Requires projectile (https://github.com/bbatsov/projectile) for
|
|
|
|
;; project-awareness, and f.el (https://github.com/rejeep/f.el) for file
|
|
|
|
;; functions.
|
|
|
|
(defun evil-ex-replace-special-filenames (file-name)
|
|
|
|
"Replace special symbols in FILE-NAME."
|
|
|
|
(let ((current-fname (buffer-file-name))
|
|
|
|
(alternate-fname (and (other-buffer)
|
|
|
|
(buffer-file-name (other-buffer)))))
|
|
|
|
(setq file-name
|
|
|
|
;; %:p:h => the project root (or current directory otherwise)
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%:p\\)"
|
2016-01-21 19:35:01 -05:00
|
|
|
(narf/project-root) file-name t t 2))
|
2015-11-17 02:04:30 -05:00
|
|
|
(setq file-name
|
2016-01-21 19:35:01 -05:00
|
|
|
;; %:p => the current directory
|
2015-11-17 02:04:30 -05:00
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%:d\\)"
|
|
|
|
default-directory file-name t t 2))
|
|
|
|
(when current-fname
|
|
|
|
(setq file-name
|
|
|
|
;; %:e => ext
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%:e\\)"
|
|
|
|
(f-ext current-fname) file-name t t 2))
|
|
|
|
(setq file-name
|
|
|
|
;; %:r => filename
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%:r\\)"
|
|
|
|
(f-no-ext current-fname) file-name t t 2))
|
|
|
|
(setq file-name
|
|
|
|
;; %:t => filename.ext
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%:t\\)"
|
|
|
|
(f-base current-fname) file-name t t 2))
|
|
|
|
(setq file-name
|
|
|
|
;; % => file path for current frame
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(%\\)"
|
|
|
|
current-fname file-name t t 2)))
|
|
|
|
(when alternate-fname
|
|
|
|
(setq file-name
|
|
|
|
;; # => file path for alternative frame
|
|
|
|
(replace-regexp-in-string "\\(^\\|[^\\\\]\\)\\(#\\)"
|
|
|
|
alternate-fname file-name t t 2)))
|
|
|
|
(setq file-name
|
|
|
|
(replace-regexp-in-string "\\\\\\([#%]\\)"
|
|
|
|
"\\1" file-name t)))
|
2015-12-11 02:21:49 -05:00
|
|
|
file-name))
|
|
|
|
|
2015-12-11 16:51:04 -05:00
|
|
|
;; Make :g[lobal] highlight matches
|
2016-04-08 16:15:37 -04:00
|
|
|
;; TODO Redo this mess
|
2015-12-11 16:51:04 -05:00
|
|
|
(defvar narf-buffer-match-global evil-ex-substitute-global "")
|
|
|
|
(defun narf--ex-buffer-match (flag &optional arg)
|
|
|
|
(let ((hl-name 'evil-ex-buffer-match))
|
|
|
|
(with-selected-window (minibuffer-selected-window)
|
|
|
|
(narf/-ex-match-init hl-name)
|
|
|
|
(narf/-ex-buffer-match arg hl-name (list (if narf-buffer-match-global ?g))))))
|
|
|
|
(defun narf--ex-global-match (flag &optional arg)
|
|
|
|
(let ((hl-name 'evil-ex-global-match))
|
|
|
|
(with-selected-window (minibuffer-selected-window)
|
|
|
|
(narf/-ex-match-init hl-name)
|
|
|
|
(let ((result (car-safe (evil-ex-parse-global arg))))
|
|
|
|
(narf/-ex-buffer-match result hl-name nil (point-min) (point-max))))))
|
|
|
|
|
|
|
|
(evil-ex-define-argument-type buffer-match :runner narf--ex-buffer-match)
|
|
|
|
(evil-ex-define-argument-type global-match :runner narf--ex-global-match)
|
|
|
|
|
2015-12-11 02:21:49 -05:00
|
|
|
(evil-define-interactive-code "<//>"
|
|
|
|
:ex-arg buffer-match
|
|
|
|
(list (when (evil-ex-p) evil-ex-argument)))
|
2015-12-11 16:51:04 -05:00
|
|
|
(evil-define-interactive-code "<g//>"
|
2015-12-11 02:21:49 -05:00
|
|
|
:ex-arg global-match
|
2015-12-11 16:51:04 -05:00
|
|
|
(when (evil-ex-p) (evil-ex-parse-global evil-ex-argument)))
|
|
|
|
|
|
|
|
(evil-define-operator narf:align (&optional beg end bang pattern)
|
2016-02-27 13:47:33 -05:00
|
|
|
"Ex interface to `align-regexp'. Accepts vim-style regexps."
|
2015-12-11 16:51:04 -05:00
|
|
|
(interactive "<r><!><//>")
|
|
|
|
(align-regexp
|
|
|
|
beg end
|
|
|
|
(concat "\\(\\s-*\\)"
|
|
|
|
(if bang
|
|
|
|
(regexp-quote pattern)
|
2016-02-27 13:47:33 -05:00
|
|
|
(evil-transform-vim-style-regexp pattern)))
|
2015-12-11 16:51:04 -05:00
|
|
|
1 1))
|
2016-04-05 23:58:32 -04:00
|
|
|
|
2015-12-11 16:51:04 -05:00
|
|
|
(evil-define-operator narf:evil-ex-global (beg end pattern command &optional invert)
|
|
|
|
:motion mark-whole-buffer
|
|
|
|
:move-point nil
|
|
|
|
(interactive "<r><g//><!>")
|
|
|
|
(evil-ex-global beg end pattern command invert))
|
|
|
|
(exmap "g[lobal]" 'narf:evil-ex-global))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
;; evil plugins
|
2015-10-15 14:01:53 -04:00
|
|
|
(use-package evil-anzu
|
2015-11-18 15:22:00 -05:00
|
|
|
:config
|
|
|
|
(setq anzu-cons-mode-line-p nil
|
2015-11-19 05:55:21 -05:00
|
|
|
anzu-minimum-input-length 2
|
|
|
|
anzu-search-threshold 500))
|
2015-10-15 14:01:53 -04:00
|
|
|
|
|
|
|
(use-package evil-args
|
|
|
|
:commands (evil-inner-arg evil-outer-arg evil-forward-arg evil-backward-arg evil-jump-out-args)
|
|
|
|
:init
|
|
|
|
(define-key evil-inner-text-objects-map "a" #'evil-inner-arg)
|
2015-11-03 23:44:54 -05:00
|
|
|
(define-key evil-outer-text-objects-map "a" #'evil-outer-arg))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
(use-package evil-commentary
|
2016-04-16 21:27:59 -04:00
|
|
|
:commands (evil-commentary evil-commentary-yank evil-commentary-line)
|
2015-06-15 09:05:52 +02:00
|
|
|
:config (evil-commentary-mode 1))
|
|
|
|
|
|
|
|
(use-package evil-exchange
|
|
|
|
:commands evil-exchange
|
|
|
|
:config
|
2015-07-26 13:14:31 +02:00
|
|
|
(advice-add 'evil-force-normal-state :after 'narf*evil-exchange-off))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-02-20 16:16:01 -05:00
|
|
|
(use-package evil-multiedit
|
|
|
|
:commands (evil-multiedit-match-all
|
|
|
|
evil-multiedit-match-and-next
|
|
|
|
evil-multiedit-match-and-prev
|
|
|
|
evil-multiedit-toggle-or-restrict-region
|
|
|
|
evil-multiedit-next
|
|
|
|
evil-multiedit-prev
|
2016-03-23 11:49:13 -04:00
|
|
|
evil-multiedit-abort
|
|
|
|
evil-multiedit-ex-match)
|
2016-02-18 05:05:03 -05:00
|
|
|
:init
|
2016-02-26 00:04:45 -05:00
|
|
|
(map! :v "R" 'evil-multiedit-match-all
|
|
|
|
:n "M-C-D" 'evil-multiedit-restore
|
|
|
|
:nv "M-d" 'evil-multiedit-match-and-next
|
|
|
|
:nv "M-D" 'evil-multiedit-match-and-prev)
|
2015-06-15 09:05:52 +02:00
|
|
|
:config
|
2016-02-20 16:16:01 -05:00
|
|
|
(map! :v "RET" 'evil-multiedit-toggle-or-restrict-region
|
|
|
|
(:map evil-multiedit-state-map
|
|
|
|
"RET" 'evil-multiedit-toggle-or-restrict-region
|
|
|
|
"C-n" 'evil-multiedit-next
|
|
|
|
"C-p" 'evil-multiedit-prev)
|
|
|
|
(:map evil-multiedit-insert-state-map
|
|
|
|
"C-n" 'evil-multiedit-next
|
|
|
|
"C-p" 'evil-multiedit-prev)))
|
2015-11-09 15:55:03 -05:00
|
|
|
|
|
|
|
(use-package evil-indent-plus
|
2016-03-03 15:05:38 -05:00
|
|
|
:commands (evil-indent-plus-i-indent
|
|
|
|
evil-indent-plus-a-indent
|
|
|
|
evil-indent-plus-i-indent-up
|
|
|
|
evil-indent-plus-a-indent-up
|
|
|
|
evil-indent-plus-i-indent-up-down
|
|
|
|
evil-indent-plus-a-indent-up-down)
|
|
|
|
:init
|
|
|
|
(map! (:map evil-inner-text-objects-map
|
|
|
|
"i" 'evil-indent-plus-i-indent
|
|
|
|
"I" 'evil-indent-plus-i-indent-up
|
|
|
|
"J" 'evil-indent-plus-i-indent-up-down)
|
|
|
|
(:map evil-outer-text-objects-map
|
|
|
|
"i" 'evil-indent-plus-a-indent
|
|
|
|
"I" 'evil-indent-plus-a-indent-up
|
|
|
|
"J" 'evil-indent-plus-a-indent-up-down)))
|
2015-06-04 18:23:21 -04:00
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
(use-package evil-matchit
|
2015-10-15 14:01:53 -04:00
|
|
|
:commands (evilmi-jump-items evilmi-text-object global-evil-matchit-mode)
|
|
|
|
:config (global-evil-matchit-mode 1)
|
|
|
|
:init
|
|
|
|
(define-key evil-normal-state-map "%" #'evilmi-jump-items)
|
|
|
|
(define-key evil-inner-text-objects-map "%" #'evilmi-text-object)
|
|
|
|
(define-key evil-outer-text-objects-map "%" #'evilmi-text-object))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
2016-04-10 18:48:05 -04:00
|
|
|
(use-package evil-numbers
|
|
|
|
:commands (evil-numbers/inc-at-pt evil-numbers/dec-at-pt))
|
|
|
|
|
|
|
|
(use-package evil-textobj-anyblock
|
|
|
|
:commands (evil-textobj-anyblock-inner-block evil-textobj-anyblock-a-block)
|
|
|
|
:init
|
|
|
|
(define-key evil-inner-text-objects-map "B" 'evil-textobj-anyblock-inner-block)
|
|
|
|
(define-key evil-outer-text-objects-map "B" 'evil-textobj-anyblock-a-block))
|
|
|
|
|
|
|
|
(use-package evil-search-highlight-persist
|
|
|
|
:config
|
|
|
|
(global-evil-search-highlight-persist t)
|
|
|
|
(advice-add 'evil-force-normal-state :after 'evil-search-highlight-persist-remove-all))
|
|
|
|
|
2016-02-18 03:40:22 -05:00
|
|
|
(use-package evil-easymotion
|
|
|
|
:defer 1
|
2016-04-10 18:48:05 -04:00
|
|
|
:init (defvar narf--evil-snipe-repeat-fn)
|
2016-02-18 03:40:22 -05: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)
|
|
|
|
(evilem-define "gs" 'evil-snipe-repeat
|
2016-03-03 15:05:26 -05:00
|
|
|
:pre-hook (save-excursion (call-interactively #'evil-snipe-s))
|
|
|
|
:bind ((evil-snipe-scope 'buffer)
|
|
|
|
(evil-snipe-enable-highlight)
|
|
|
|
(evil-snipe-enable-incremental-highlight)))
|
2016-02-18 03:40:22 -05:00
|
|
|
(evilem-define "gS" 'evil-snipe-repeat-reverse
|
2016-03-03 15:05:26 -05:00
|
|
|
:pre-hook (save-excursion (call-interactively #'evil-snipe-s))
|
|
|
|
:bind ((evil-snipe-scope 'buffer)
|
|
|
|
(evil-snipe-enable-highlight)
|
2016-04-10 18:48:05 -04:00
|
|
|
(evil-snipe-enable-incremental-highlight)))
|
2015-11-09 15:55:03 -05:00
|
|
|
|
2016-04-10 18:48:05 -04:00
|
|
|
(setq narf--evil-snipe-repeat-fn
|
|
|
|
(evilem-create 'evil-snipe-repeat
|
|
|
|
:bind ((evil-snipe-scope 'whole-buffer)
|
|
|
|
(evil-snipe-enable-highlight)
|
|
|
|
(evil-snipe-enable-incremental-highlight)))))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
(use-package evil-snipe
|
|
|
|
:init
|
|
|
|
(setq-default
|
|
|
|
evil-snipe-smart-case t
|
2015-10-28 17:26:54 -04:00
|
|
|
evil-snipe-repeat-keys nil ; using space to repeat
|
2015-06-15 09:05:52 +02:00
|
|
|
evil-snipe-scope 'line
|
2015-10-15 14:01:53 -04:00
|
|
|
evil-snipe-repeat-scope 'visible
|
2015-09-29 09:53:45 -04:00
|
|
|
evil-snipe-override-evil-repeat-keys nil ; causes problems with remapped ;
|
2016-04-19 03:12:41 -04:00
|
|
|
evil-snipe-aliases '((?\[ "[[{(]")
|
|
|
|
(?\] "[]})]")
|
|
|
|
(?\; "[;:]")))
|
2015-08-12 15:05:40 +02:00
|
|
|
:config
|
2015-06-15 09:05:52 +02:00
|
|
|
(evil-snipe-mode 1)
|
2016-04-10 18:48:05 -04:00
|
|
|
(evil-snipe-override-mode 1)
|
|
|
|
|
|
|
|
(define-key evil-snipe-parent-transient-map (kbd "C-;") 'narf/evil-snipe-easymotion))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
(use-package evil-surround
|
|
|
|
:commands (global-evil-surround-mode
|
|
|
|
evil-surround-edit
|
|
|
|
evil-Surround-edit
|
|
|
|
evil-surround-region)
|
|
|
|
:config
|
|
|
|
(global-evil-surround-mode 1)
|
2015-11-10 18:10:32 -05:00
|
|
|
|
|
|
|
(add-hook! org-mode
|
|
|
|
(mapc (lambda (p) (add-to-list 'evil-surround-pairs-alist p))
|
|
|
|
'((?l . narf/evil-surround-latex))))
|
|
|
|
|
|
|
|
(add-hook! emacs-lisp-mode
|
|
|
|
(setq evil-surround-pairs-alist
|
2016-03-01 02:05:04 -05:00
|
|
|
(cons '(?\` . ("`" . "'")) evil-surround-pairs-alist)))
|
2015-11-10 18:10:32 -05:00
|
|
|
|
|
|
|
(add-hook! python-mode
|
|
|
|
(setq evil-surround-pairs-alist
|
|
|
|
(cons '(?d . ("\"\"\"" . "\"\"\"")) evil-surround-pairs-alist)))
|
|
|
|
|
2015-06-15 09:05:52 +02:00
|
|
|
;; Escaped surround characters
|
2015-11-09 15:55:03 -05:00
|
|
|
(setq-default evil-surround-pairs-alist
|
|
|
|
(cons '(?\\ . narf/evil-surround-escaped)
|
|
|
|
evil-surround-pairs-alist)))
|
2015-06-15 09:05:52 +02:00
|
|
|
|
|
|
|
(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-04 18:23:21 -04:00
|
|
|
|
2016-04-04 12:06:34 -04:00
|
|
|
(use-package evil-escape
|
|
|
|
:config
|
2016-04-05 23:58:32 -04:00
|
|
|
(setq evil-escape-key-sequence "jk"
|
|
|
|
evil-escape-delay 0.2)
|
2016-04-07 06:31:45 -04:00
|
|
|
|
|
|
|
;; evil-escape causes noticable lag in linewise motions in visual mode, so only enable
|
2016-04-08 16:15:37 -04:00
|
|
|
;; it in insert mode. (I only need jk for insert mode anyway)
|
2016-04-07 06:31:45 -04:00
|
|
|
(defun narf|evil-escape-disable () (evil-escape-mode -1))
|
|
|
|
(add-hook 'evil-insert-state-entry-hook 'evil-escape-mode)
|
|
|
|
(add-hook 'evil-insert-state-exit-hook 'narf|evil-escape-disable))
|
2016-04-04 12:06:34 -04:00
|
|
|
|
2015-06-04 18:23:21 -04:00
|
|
|
(provide 'core-evil)
|
|
|
|
;;; core-evil.el ends here
|