Add A, I, $, 0 bindings to iedit state

This commit is contained in:
syl20bnr 2014-12-06 23:40:18 -05:00
parent b344553aaf
commit 8461b0a421
2 changed files with 59 additions and 21 deletions

View file

@ -7,10 +7,9 @@
- [Install](#install)
- [Key bindings](#key-bindings)
- [State transitions](#state-transitions)
- [In `iedit state`](#in-iedit-state)
- [In `iedit-insert state`](#in-iedit-insert-state)
- [In iedit state](#in-iedit-state)
- [In iedit-insert state](#in-iedit-insert-state)
- [Examples](#examples)
- [Tips](#tips)
<!-- markdown-toc end -->
@ -58,7 +57,7 @@ or <kbd>fd</kbd> to return to `normal state`.
**Note:** evil commands which switch to `insert state` will switch in
`iedit-insert state`.
### In `iedit state`
### In iedit state
`iedit state` inherits from `normal state`, the following key bindings are
specific to `iedit state`.
@ -66,12 +65,15 @@ specific to `iedit state`.
Key Binding | Description
------------------|------------------------------------------------------------
<kbd>ESC</kbd> | go back to `normal state`
<kbd>0</kbd> | go to then beginning of the current occurrence
<kbd>$</kbd> | go to then end of the current occurrence
<kbd>#</kbd> | prefix all occurrences with an increasing number (<kbd>SPC u</kbd> to choose the starting number).
<kbd>A</kbd> | go to the beginning of the current occurrence and switch to `iedit-insert state`
<kbd>D</kbd> | delete the occurrences
<kbd>F</kbd> | restrict the scope to the function
<kbd>gg</kbd> | go to first occurrence
<kbd>G</kbd> | go to last occurrence
<kbd>I</kbd> | toggle case-sensitivity
<kbd>I</kbd> | go to the end of the current occurrence and switch to `iedit-insert state`
<kbd>J</kbd> | increase the edition scope by one line below
<kbd>K</kbd> | increase the edition scope by one line above
<kbd>L</kbd> | restrict the scope to the current line
@ -83,7 +85,7 @@ specific to `iedit state`.
<kbd>U</kbd> | Up-case the occurrences
<kbd>C-U</kbd> | down-case the occurrences
### In `iedit-insert state`
### In iedit-insert state
Key Binding | Description
---------------------------|------------------------------------------------------------
@ -97,13 +99,6 @@ specific to `iedit state`.
- substitute symbol _with expand-region_: <kbd>SPC v v e S "toto" ESC ESC</kbd>
- replace symbol with yanked (copied) text _with expand region_: <kbd>SPC v e p ESC ESC</kbd>
## Todo
- Make `A` append to the end of the edited region.
- Make `I` insert to the beginning of the edited region.
- Make `0` go to the beginning of the edited region.
- Make `$` go to the end of the edited region.
[auto-highlight-symbol]: https://github.com/gennad/auto-highlight-symbol
[iedit]: https://github.com/tsdh/iedit
[expand-region]: https://github.com/magnars/expand-region.el

View file

@ -30,13 +30,49 @@
(iedit-done)
(evil-normal-state))
(defmacro evil-iedit-state|wrap-evil-command (command)
"Call evil command and switch to iedit-insert state."
(defmacro evil-iedit-state||swith-to-insert-state-after-command (command &optional interactive)
"Call COMMAND and switch to iedit-insert state.
If INTERACTIVE is non-nil then COMMAND is called interactively."
`(progn
(call-interactively ',command)
(evil-iedit-state) ; required to correctly update the cursors
(if ,interactive
(call-interactively ',command)
(funcall ',command))
;; required to correctly update the cursors
(evil-iedit-state)
(evil-iedit-insert-state)))
(defun evil-iedit-state//goto-overlay-start ()
"Return the position of the start of the current overlay."
(goto-char (overlay-start (iedit-find-current-occurrence-overlay))))
(defun evil-iedit-state//goto-overlay-end ()
"Return the position of the end of the current overlay."
(goto-char (overlay-end (iedit-find-current-occurrence-overlay))))
(defun evil-iedit-state/evil-beginning-of-line (count)
"Go to the beginning of the current overlay."
(interactive "p")
(evil-iedit-state//goto-overlay-start))
(defun evil-iedit-state/evil-end-of-line ()
"Go to the beginning of the current overlay."
(interactive)
(evil-iedit-state//goto-overlay-end))
(defun evil-iedit-state/evil-append-line ()
"Put the point at then end of current overlay and switch to
`iedit-insert state'."
(interactive)
(evil-iedit-state||swith-to-insert-state-after-command
evil-iedit-state//goto-overlay-end))
(defun evil-iedit-state/evil-insert-line ()
"Put the point at then end of current overlay and switch to
`iedit-insert state'."
(interactive)
(evil-iedit-state||swith-to-insert-state-after-command
evil-iedit-state//goto-overlay-start))
(defun evil-iedit-state/substitute ()
"Wipe all the occurrences and switch in `iedit-insert state'"
(interactive)
@ -46,7 +82,7 @@
(defun evil-iedit-state/evil-change ()
"Wipe all the occurrences and switch in `iedit-insert state'"
(interactive)
(evil-iedit-state|wrap-evil-command evil-change))
(evil-iedit-state||swith-to-insert-state-after-command evil-change t))
(defun evil-iedit-state/paste-replace (count)
"Replace the selection with the yanked text."
@ -57,12 +93,12 @@
(defun evil-iedit-state/evil-append ()
"Append and switch to `iedit-insert state'"
(interactive)
(evil-iedit-state|wrap-evil-command evil-append))
(evil-iedit-state||swith-to-insert-state-after-command evil-append t))
(defun evil-iedit-state/evil-substitute ()
"Append and switch to `iedit-insert state'"
(interactive)
(evil-iedit-state|wrap-evil-command evil-substitute))
(evil-iedit-state||swith-to-insert-state-after-command evil-substitute t))
;; expand-region integration, add an "e" command
(eval-after-load 'expand-region
@ -112,14 +148,17 @@ the initial string globally."
(run-hooks 'iedit-mode-end-hook))
(define-key evil-iedit-state-map "#" 'iedit-number-occurrences)
(define-key evil-iedit-state-map "$" 'evil-iedit-state/evil-end-of-line)
(evil-redirect-digit-argument evil-iedit-state-map "0" 'evil-iedit-state/evil-beginning-of-line)
(define-key evil-iedit-state-map "a" 'evil-iedit-state/evil-append)
(define-key evil-iedit-state-map "A" 'evil-iedit-state/evil-append-line)
(define-key evil-iedit-state-map "c" 'evil-iedit-state/evil-change)
(define-key evil-iedit-state-map "D" 'iedit-delete-occurrences)
(define-key evil-iedit-state-map "F" 'iedit-restrict-function)
(define-key evil-iedit-state-map "gg" 'iedit-goto-first-occurrence)
(define-key evil-iedit-state-map "G" 'iedit-goto-last-occurrence)
(define-key evil-iedit-state-map "i" 'evil-iedit-insert-state)
(define-key evil-iedit-state-map "I" 'iedit-toggle-case-sensitive)
(define-key evil-iedit-state-map "I" 'evil-iedit-state/evil-insert-line)
(define-key evil-iedit-state-map "J" 'iedit-expand-down-a-line)
(define-key evil-iedit-state-map "K" 'iedit-expand-up-a-line)
(define-key evil-iedit-state-map "L" 'iedit-restrict-current-line)
@ -138,4 +177,8 @@ the initial string globally."
(define-key evil-iedit-insert-state-map "\C-g" 'evil-iedit-state/quit-iedit-mode)
(define-key evil-iedit-insert-state-map [escape] 'evil-iedit-state)
;; unbound iedit commands:
;; toggle buffering
;; toggle case sensitive
(provide 'evil-iedit-state)