2019-04-21 19:59:44 -04:00
|
|
|
;;; editor/evil/config.el -*- lexical-binding: t; -*-
|
2017-02-06 00:25:54 -05:00
|
|
|
|
2017-01-31 19:50:02 -05:00
|
|
|
;; I'm a vimmer at heart. Its modal philosophy suits me better, and this module
|
|
|
|
;; strives to make Emacs a much better vim than vim was.
|
|
|
|
|
2018-08-23 18:42:09 +02:00
|
|
|
(defvar +evil-want-o/O-to-continue-comments t
|
|
|
|
"If non-nil, the o/O keys will continue comment lines if the point is on a
|
|
|
|
line with a linewise comment.")
|
|
|
|
|
2019-06-17 12:37:19 +02:00
|
|
|
(defvar +evil-preprocessor-regexp "^\\s-*#[a-zA-Z0-9_]"
|
|
|
|
"The regexp used by `+evil/next-preproc-directive' and
|
|
|
|
`+evil/previous-preproc-directive' on ]# and [#, to jump between preprocessor
|
|
|
|
directives. By default, this only recognizes C directives.")
|
|
|
|
|
2018-06-27 03:09:06 +02:00
|
|
|
;; Set these defaults before `evil'; use `defvar' so they can be changed prior
|
|
|
|
;; to loading.
|
2019-05-12 01:43:45 -04:00
|
|
|
(defvar evil-want-C-i-jump (or (daemonp) (display-graphic-p)))
|
2018-06-27 03:09:06 +02:00
|
|
|
(defvar evil-want-C-u-scroll t)
|
|
|
|
(defvar evil-want-C-w-scroll t)
|
|
|
|
(defvar evil-want-Y-yank-to-eol t)
|
2019-08-19 12:48:36 -04:00
|
|
|
(defvar evil-want-abbrev-expand-on-insert-exit nil)
|
2018-06-26 18:05:35 +02:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil
|
2019-03-04 20:35:47 -05:00
|
|
|
:hook (doom-init-modules . evil-mode)
|
|
|
|
:demand t
|
|
|
|
:preface
|
2018-06-27 03:09:06 +02:00
|
|
|
(setq evil-want-visual-char-semi-exclusive t
|
2017-01-31 19:50:02 -05:00
|
|
|
evil-magic t
|
|
|
|
evil-echo-state t
|
2017-02-03 19:24:39 -05:00
|
|
|
evil-indent-convert-tabs t
|
2017-01-31 19:50:02 -05:00
|
|
|
evil-ex-search-vim-style-regexp t
|
|
|
|
evil-ex-substitute-global t
|
|
|
|
evil-ex-visual-char-range t ; column range for ex commands
|
2017-02-21 00:47:34 -05:00
|
|
|
evil-insert-skip-empty-lines t
|
2017-05-15 13:52:22 +02:00
|
|
|
evil-mode-line-format 'nil
|
2018-01-09 03:50:51 -05:00
|
|
|
evil-respect-visual-line-mode t
|
2017-05-15 13:52:22 +02:00
|
|
|
;; more vim-like behavior
|
|
|
|
evil-symbol-word-search t
|
2018-02-02 15:11:03 -05:00
|
|
|
;; cursor appearance
|
2019-07-18 15:27:20 +02:00
|
|
|
evil-default-cursor '+evil-default-cursor-fn
|
2018-02-02 15:11:03 -05:00
|
|
|
evil-normal-state-cursor 'box
|
2019-07-18 15:27:20 +02:00
|
|
|
evil-emacs-state-cursor '(box +evil-emacs-cursor-fn)
|
2018-02-02 15:11:03 -05:00
|
|
|
evil-insert-state-cursor 'bar
|
2018-06-25 15:39:38 +02:00
|
|
|
evil-visual-state-cursor 'hollow
|
|
|
|
;; must be set before evil/evil-collection is loaded
|
2018-09-12 21:48:27 -04:00
|
|
|
evil-want-keybinding (not (featurep! +everywhere)))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
2018-02-03 22:38:07 -05:00
|
|
|
:config
|
2017-02-19 18:14:46 -05:00
|
|
|
(evil-select-search-module 'evil-search-module 'evil-search)
|
|
|
|
|
2018-06-03 15:46:00 +02:00
|
|
|
(put 'evil-define-key* 'lisp-indent-function 'defun)
|
|
|
|
|
2019-07-21 04:02:09 +02:00
|
|
|
;; stop copying each visual state move to the clipboard:
|
|
|
|
;; https://bitbucket.org/lyro/evil/issue/336/osx-visual-state-copies-the-region-on
|
|
|
|
;; grokked from:
|
|
|
|
;; http://stackoverflow.com/questions/15873346/elisp-rename-macro
|
|
|
|
(advice-add #'evil-visual-update-x-selection :override #'ignore)
|
|
|
|
|
2019-05-14 22:26:56 -04:00
|
|
|
;; Start help-with-tutorial in emacs state
|
|
|
|
(advice-add #'help-with-tutorial :after (lambda (&rest _) (evil-emacs-state +1)))
|
|
|
|
|
2019-03-04 20:35:47 -05:00
|
|
|
;; Done in a hook to ensure the popup rules load as late as possible
|
2019-07-26 22:46:05 +02:00
|
|
|
(add-hook! 'doom-init-modules-hook
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil--init-popup-rules-h ()
|
|
|
|
(set-popup-rules!
|
|
|
|
'(("^\\*evil-registers" :size 0.3)
|
|
|
|
("^\\*Command Line" :size 8)))))
|
2017-02-21 16:04:35 -05:00
|
|
|
|
2019-05-17 20:45:23 -04:00
|
|
|
;; Change the cursor color in emacs state. We do it this roundabout way
|
|
|
|
;; instead of changing `evil-default-cursor' (or `evil-emacs-state-cursor') so
|
|
|
|
;; it won't interfere with users who have changed these variables.
|
|
|
|
(defvar +evil--default-cursor-color "#ffffff")
|
|
|
|
(defvar +evil--emacs-cursor-color "#ff9999")
|
2018-02-02 15:11:03 -05:00
|
|
|
|
2019-07-26 22:46:05 +02:00
|
|
|
(add-hook! 'doom-load-theme-hook
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-update-cursor-color-h ()
|
|
|
|
(setq +evil--default-cursor-color (face-background 'cursor)
|
|
|
|
+evil--emacs-cursor-color (face-foreground 'warning))))
|
2019-05-17 20:45:23 -04:00
|
|
|
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-default-cursor-fn ()
|
2019-05-17 20:45:23 -04:00
|
|
|
(evil-set-cursor-color +evil--default-cursor-color))
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-emacs-cursor-fn ()
|
2019-05-17 20:45:23 -04:00
|
|
|
(evil-set-cursor-color +evil--emacs-cursor-color))
|
2017-02-19 18:14:46 -05:00
|
|
|
|
2019-07-18 15:27:20 +02:00
|
|
|
(setq-hook! 'after-change-major-mode-hook evil-shift-width tab-width)
|
2018-06-05 13:23:37 +02:00
|
|
|
|
2017-01-31 19:50:02 -05:00
|
|
|
|
2017-05-15 13:52:22 +02:00
|
|
|
;; --- keybind fixes ----------------------
|
2018-06-03 15:46:00 +02:00
|
|
|
(after! wgrep
|
|
|
|
;; A wrapper that invokes `wgrep-mark-deletion' across lines you use
|
|
|
|
;; `evil-delete' in wgrep buffers.
|
2018-06-18 15:02:24 +02:00
|
|
|
(define-key wgrep-mode-map [remap evil-delete] #'+evil-delete))
|
2018-06-03 15:46:00 +02:00
|
|
|
|
2019-07-26 22:46:05 +02:00
|
|
|
(add-hook! 'doom-escape-hook
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-disable-ex-highlights-h ()
|
|
|
|
"Disable ex search buffer highlights."
|
|
|
|
(when (evil-ex-hl-active-p 'evil-ex-search)
|
|
|
|
(evil-ex-nohighlight)
|
|
|
|
t)))
|
2018-01-06 03:00:45 -05:00
|
|
|
|
2017-05-15 13:52:22 +02:00
|
|
|
|
2018-01-06 18:50:49 -05:00
|
|
|
;; --- evil hacks -------------------------
|
2018-05-27 12:47:36 +02:00
|
|
|
(unless noninteractive
|
|
|
|
(setq save-silently t)
|
2019-07-26 22:46:05 +02:00
|
|
|
(add-hook! 'after-save-hook
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-display-vimlike-save-message-h ()
|
|
|
|
"Shorter, vim-esque save messages."
|
|
|
|
(message "\"%s\" %dL, %dC written"
|
|
|
|
(if buffer-file-name
|
|
|
|
(file-relative-name (file-truename buffer-file-name) (doom-project-root))
|
|
|
|
(buffer-name))
|
|
|
|
(count-lines (point-min) (point-max))
|
|
|
|
(buffer-size)))))
|
2018-01-06 18:50:49 -05:00
|
|
|
;; Make ESC (from normal mode) the universal escaper. See `doom-escape-hook'.
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-force-normal-state :after #'+evil-escape-a)
|
2018-01-06 18:50:49 -05:00
|
|
|
;; Don't move cursor when indenting
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-indent :around #'+evil--static-reindent-a)
|
2018-05-05 07:49:20 +02:00
|
|
|
;; monkey patch `evil-ex-replace-special-filenames' to improve support for
|
|
|
|
;; file modifiers like %:p:h. This adds support for most of vim's modifiers,
|
|
|
|
;; and one custom one: %:P (expand to the project root).
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-ex-replace-special-filenames :override #'+evil-resolve-vim-path-a)
|
2018-01-06 18:50:49 -05:00
|
|
|
|
2019-03-04 20:42:04 -05:00
|
|
|
;; make `try-expand-dabbrev' (from `hippie-expand') work in minibuffer
|
2019-07-18 15:27:20 +02:00
|
|
|
(add-hook 'minibuffer-inactive-mode-hook #'+evil--fix-dabbrev-in-minibuffer-h)
|
2018-01-06 18:50:49 -05:00
|
|
|
|
2018-04-26 22:27:08 -04:00
|
|
|
;; Focus and recenter new splits
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-window-split :override #'+evil-window-split-a)
|
|
|
|
(advice-add #'evil-window-vsplit :override #'+evil-window-vsplit-a)
|
2017-05-15 13:52:22 +02:00
|
|
|
|
2018-08-27 21:25:52 +02:00
|
|
|
;; In evil, registers 2-9 are buffer-local. In vim, they're global, so...
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-global-marker-p :around #'+evil--make-numbered-markers-global-a)
|
2018-08-27 21:25:52 +02:00
|
|
|
|
2018-09-07 22:02:41 -04:00
|
|
|
;; Make o/O continue comments (see `+evil-want-o/O-to-continue-comments')
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(advice-add #'evil-open-above :around #'+evil--insert-newline-above-and-respect-comments-a)
|
|
|
|
(advice-add #'evil-open-below :around #'+evil--insert-newline-below-and-respect-comments-a)
|
2018-08-23 18:42:09 +02:00
|
|
|
|
2019-03-09 02:43:07 -05:00
|
|
|
;; Recenter screen after most searches
|
:boom: revise advice naming convention (1/2)
This is first of three big naming convention updates that have been a
long time coming. With 2.1 on the horizon, all the breaking updates will
batched together in preparation for the long haul.
In this commit, we do away with the asterix to communicate that a
function is an advice function, and we replace it with the '-a' suffix.
e.g.
doom*shut-up -> doom-shut-up-a
doom*recenter -> doom-recenter-a
+evil*static-reindent -> +evil--static-reindent-a
The rationale behind this change is:
1. Elisp's own formatting/indenting tools would occasionally struggle
with | and * (particularly pp and cl-prettyprint). They have no
problem with / and :, fortunately.
2. External syntax highlighters (like pygmentize, discord markdown or
github markdown) struggle with it, sometimes refusing to highlight
code beyond these symbols.
3. * and | are less expressive than - and -- in communicating the
intended visibility, versatility and stability of a function.
4. It complicated the regexps we must use to search for them.
5. They were arbitrary and over-complicated to begin with, decided
on haphazardly way back when Doom was simply "my private config".
Anyhow, like how predicate functions have the -p suffix, we'll adopt the
-a suffix for advice functions, -h for hook functions and -fn for
variable functions.
Other noteable changes:
- Replaces advice-{add,remove}! macro with new def-advice!
macro. The old pair weren't as useful. The new def-advice! saves on a
lot of space.
- Removed "stage" assertions to make sure you were using the right
macros in the right place. Turned out to not be necessary, we'll
employ better checks later.
2019-07-18 15:42:52 +02:00
|
|
|
(dolist (fn '(evil-visualstar/begin-search-forward
|
|
|
|
evil-visualstar/begin-search-backward
|
|
|
|
evil-ex-search-word-backward
|
|
|
|
evil-ex-search-word-backward
|
|
|
|
evil-ex-search-forward
|
|
|
|
evil-ex-search-backward))
|
|
|
|
(advice-add fn :after #'doom-recenter-a))
|
2019-03-09 02:43:07 -05:00
|
|
|
|
2018-06-15 04:45:09 +02:00
|
|
|
;; --- custom interactive codes -----------
|
|
|
|
;; These arg types will highlight matches in the current buffer
|
2019-08-15 14:58:41 -04:00
|
|
|
(evil-ex-define-argument-type regexp-match
|
|
|
|
:runner (lambda (flag &optional arg) (+evil-ex-regexp-match flag arg 'inverted)))
|
|
|
|
(evil-ex-define-argument-type regexp-global-match
|
|
|
|
:runner +evil-ex-regexp-match)
|
|
|
|
|
|
|
|
(defun +evil--regexp-match-args (arg)
|
|
|
|
(when (evil-ex-p)
|
|
|
|
(cl-destructuring-bind (&optional arg flags)
|
|
|
|
(evil-delimited-arguments arg 2)
|
|
|
|
(list arg (string-to-list flags)))))
|
|
|
|
|
2018-06-15 04:45:09 +02:00
|
|
|
;; Other commands can make use of this
|
|
|
|
(evil-define-interactive-code "<//>"
|
2019-08-15 14:58:41 -04:00
|
|
|
:ex-arg regexp-match
|
|
|
|
(+evil--regexp-match-args evil-ex-argument))
|
2018-06-15 04:45:09 +02:00
|
|
|
|
2019-08-15 14:58:41 -04:00
|
|
|
(evil-define-interactive-code "<//!>"
|
|
|
|
:ex-arg regexp-global-match
|
|
|
|
(+evil--regexp-match-args evil-ex-argument))
|
2018-06-15 04:45:09 +02:00
|
|
|
|
|
|
|
;; Forward declare these so that ex completion works, even if the autoloaded
|
|
|
|
;; functions aren't loaded yet.
|
2019-08-15 14:58:41 -04:00
|
|
|
(evil-add-command-properties '+evil:align :ex-arg 'regexp-match)
|
|
|
|
(evil-add-command-properties '+evil:align-right :ex-arg 'regexp-match)
|
|
|
|
(evil-add-command-properties '+multiple-cursors:evil-mc :ex-arg 'regexp-global-match)
|
2018-06-25 15:39:38 +02:00
|
|
|
|
|
|
|
;; `evil-collection'
|
2019-05-12 01:43:06 -04:00
|
|
|
(when (and (featurep! +everywhere)
|
|
|
|
(not doom-reloading-p))
|
2019-03-04 20:35:47 -05:00
|
|
|
(load! "+everywhere"))
|
|
|
|
|
2019-08-15 14:58:41 -04:00
|
|
|
;; Lazy load evil ex commands
|
|
|
|
(delq! 'evil-ex features)
|
|
|
|
(add-transient-hook! 'evil-ex (provide 'evil-ex))
|
|
|
|
(after! evil-ex (load! "+commands")))
|
2017-02-09 05:09:21 -05:00
|
|
|
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
;;
|
2018-09-07 19:36:16 -04:00
|
|
|
;; Packages
|
2017-01-31 19:50:02 -05:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-commentary
|
2019-04-06 00:33:04 -04:00
|
|
|
:commands (evil-commentary
|
|
|
|
evil-commentary-yank
|
|
|
|
evil-commentary-yank-line
|
|
|
|
evil-commentary-line)
|
2017-02-02 04:35:54 -05:00
|
|
|
:config (evil-commentary-mode 1))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-easymotion
|
2019-07-21 23:31:42 +02:00
|
|
|
:commands evilem-create evilem-default-keybindings
|
2018-07-10 14:21:02 +02:00
|
|
|
:config
|
|
|
|
;; Use evil-search backend, instead of isearch
|
|
|
|
(evilem-make-motion evilem-motion-search-next #'evil-ex-search-next
|
|
|
|
:bind ((evil-ex-search-highlight-all nil)))
|
|
|
|
(evilem-make-motion evilem-motion-search-previous #'evil-ex-search-previous
|
|
|
|
:bind ((evil-ex-search-highlight-all nil)))
|
|
|
|
|
|
|
|
(evilem-make-motion evilem-motion-search-word-forward #'evil-ex-search-word-forward
|
|
|
|
:bind ((evil-ex-search-highlight-all nil)))
|
|
|
|
(evilem-make-motion evilem-motion-search-word-backward #'evil-ex-search-word-backward
|
|
|
|
:bind ((evil-ex-search-highlight-all nil))))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-embrace
|
2019-07-21 23:31:42 +02:00
|
|
|
:commands embrace-add-pair embrace-add-pair-regexp
|
2018-01-14 13:40:11 -05:00
|
|
|
:hook (LaTeX-mode . embrace-LaTeX-mode-hook)
|
|
|
|
:hook (org-mode . embrace-org-mode-hook)
|
2019-03-04 14:23:12 -05:00
|
|
|
:hook ((ruby-mode enh-ruby-mode) . embrace-ruby-mode-hook)
|
|
|
|
:hook (emacs-lisp-mode . embrace-emacs-lisp-mode-hook)
|
2019-07-12 01:08:41 +02:00
|
|
|
:hook ((lisp-mode emacs-lisp-mode clojure-mode racket-mode)
|
2019-07-18 15:27:20 +02:00
|
|
|
. +evil-embrace-lisp-mode-hook-h)
|
|
|
|
:hook ((org-mode LaTeX-mode) . +evil-embrace-latex-mode-hook-h)
|
2019-07-12 01:07:23 +02:00
|
|
|
:hook ((c++-mode rust-mode rustic-mode csharp-mode java-mode swift-mode typescript-mode)
|
2019-07-18 15:27:20 +02:00
|
|
|
. +evil-embrace-angle-bracket-modes-hook-h)
|
2018-01-13 15:30:01 -05:00
|
|
|
:init
|
2019-02-28 18:26:13 -05:00
|
|
|
(after! evil-surround
|
|
|
|
(evil-embrace-enable-evil-surround-integration))
|
2017-01-31 19:50:02 -05:00
|
|
|
:config
|
|
|
|
(setq evil-embrace-show-help-p nil)
|
|
|
|
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-embrace-latex-mode-hook-h ()
|
2019-03-04 14:23:12 -05:00
|
|
|
(embrace-add-pair-regexp ?l "\\[a-z]+{" "}" #'+evil--embrace-latex))
|
|
|
|
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-embrace-lisp-mode-hook-h ()
|
2019-03-28 16:41:21 -04:00
|
|
|
(push (cons ?f (make-embrace-pair-struct
|
|
|
|
:key ?f
|
|
|
|
:read-function #'+evil--embrace-elisp-fn
|
|
|
|
:left-regexp "([^ ]+ "
|
|
|
|
:right-regexp ")"))
|
|
|
|
embrace--pairs-list))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil-embrace-angle-bracket-modes-hook-h ()
|
2019-07-12 01:07:23 +02:00
|
|
|
(set (make-local-variable 'evil-embrace-evil-surround-keys)
|
|
|
|
(delq ?< evil-embrace-evil-surround-keys))
|
|
|
|
(push (cons ?< (make-embrace-pair-struct
|
|
|
|
:key ?<
|
|
|
|
:read-function #'+evil--embrace-angle-brackets
|
|
|
|
:left-regexp "\\[a-z]+<"
|
|
|
|
:right-regexp ">"))
|
|
|
|
embrace--pairs-list))
|
|
|
|
|
2017-01-31 19:50:02 -05:00
|
|
|
;; Add escaped-sequence support to embrace
|
2018-06-23 16:48:58 +02:00
|
|
|
(setf (alist-get ?\\ (default-value 'embrace--pairs-list))
|
|
|
|
(make-embrace-pair-struct
|
|
|
|
:key ?\\
|
|
|
|
:read-function #'+evil--embrace-escaped
|
|
|
|
:left-regexp "\\[[{(]"
|
|
|
|
:right-regexp "\\[]})]")))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-escape
|
2019-07-21 23:31:42 +02:00
|
|
|
:commands evil-escape
|
2019-09-09 23:00:44 -04:00
|
|
|
:after-call pre-command-hook
|
2017-01-31 19:50:02 -05:00
|
|
|
:init
|
2017-06-09 00:37:02 +02:00
|
|
|
(setq evil-escape-excluded-states '(normal visual multiedit emacs motion)
|
2019-06-19 14:12:47 +02:00
|
|
|
evil-escape-excluded-major-modes '(neotree-mode treemacs-mode vterm-mode)
|
2017-05-15 13:52:46 +02:00
|
|
|
evil-escape-key-sequence "jk"
|
|
|
|
evil-escape-delay 0.25)
|
2018-06-03 15:46:00 +02:00
|
|
|
(evil-define-key* '(insert replace visual operator) 'global "\C-g" #'evil-escape)
|
2017-01-31 19:50:02 -05:00
|
|
|
:config
|
2017-06-09 00:37:02 +02:00
|
|
|
;; no `evil-escape' in minibuffer
|
2018-09-07 22:03:24 -04:00
|
|
|
(add-hook 'evil-escape-inhibit-functions #'minibufferp)
|
|
|
|
;; so that evil-escape-mode-hook runs, and can be toggled by evil-mc
|
|
|
|
(evil-escape-mode +1))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-exchange
|
2017-01-31 19:50:02 -05:00
|
|
|
:commands evil-exchange
|
|
|
|
:config
|
2019-07-26 22:46:05 +02:00
|
|
|
(add-hook! 'doom-escape-hook
|
2019-07-18 15:27:20 +02:00
|
|
|
(defun +evil--escape-exchange-h ()
|
|
|
|
(when evil-exchange--overlays
|
|
|
|
(evil-exchange-cancel)
|
|
|
|
t))))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-snipe
|
2019-07-21 23:31:42 +02:00
|
|
|
:commands (evil-snipe-mode
|
|
|
|
evil-snipe-override-mode
|
|
|
|
evil-snipe-local-mode
|
|
|
|
evil-snipe-override-local-mode)
|
2018-05-25 00:46:11 +02:00
|
|
|
:after-call pre-command-hook
|
2017-01-31 19:50:02 -05:00
|
|
|
:init
|
|
|
|
(setq evil-snipe-smart-case t
|
|
|
|
evil-snipe-scope 'line
|
|
|
|
evil-snipe-repeat-scope 'visible
|
2018-05-30 01:38:36 +02:00
|
|
|
evil-snipe-char-fold t)
|
2018-01-15 00:08:27 -05:00
|
|
|
:config
|
2019-06-23 11:41:45 +02:00
|
|
|
(pushnew! evil-snipe-disabled-modes 'Info-mode 'calc-mode)
|
2018-05-14 20:45:47 +02:00
|
|
|
(evil-snipe-mode +1)
|
2018-01-15 00:08:27 -05:00
|
|
|
(evil-snipe-override-mode +1))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-surround
|
2017-01-31 19:50:02 -05:00
|
|
|
:commands (global-evil-surround-mode
|
|
|
|
evil-surround-edit
|
|
|
|
evil-Surround-edit
|
|
|
|
evil-surround-region)
|
|
|
|
:config (global-evil-surround-mode 1))
|
|
|
|
|
|
|
|
|
2019-08-15 14:58:41 -04:00
|
|
|
(use-package! evil-traces
|
|
|
|
:after evil-ex
|
|
|
|
:config
|
|
|
|
(pushnew! evil-traces-argument-type-alist
|
|
|
|
'(+evil:align . evil-traces-global)
|
|
|
|
'(+evil:align-right . evil-traces-global))
|
|
|
|
(evil-traces-mode))
|
|
|
|
|
|
|
|
|
2019-03-04 20:42:04 -05:00
|
|
|
;; Allows you to use the selection for * and #
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! evil-visualstar
|
2018-07-10 14:21:45 +02:00
|
|
|
:commands (evil-visualstar/begin-search
|
2017-01-31 19:50:02 -05:00
|
|
|
evil-visualstar/begin-search-forward
|
|
|
|
evil-visualstar/begin-search-backward)
|
2017-05-15 13:52:01 +02:00
|
|
|
:init
|
2018-06-03 15:46:00 +02:00
|
|
|
(evil-define-key* 'visual 'global
|
|
|
|
"*" #'evil-visualstar/begin-search-forward
|
2018-07-10 14:21:45 +02:00
|
|
|
"#" #'evil-visualstar/begin-search-backward))
|
2017-01-31 19:50:02 -05:00
|
|
|
|
|
|
|
|
2017-06-05 00:47:56 +02:00
|
|
|
;;
|
2019-07-21 23:31:42 +02:00
|
|
|
;;; Text object plugins
|
2017-06-05 00:47:56 +02:00
|
|
|
|
2019-07-23 12:44:03 +02:00
|
|
|
(use-package! exato
|
2019-07-21 23:31:42 +02:00
|
|
|
:commands evil-outer-xml-attr evil-inner-xml-attr)
|