iedit: add cmd+D 'add next match' functionality, ala sublime text
This commit is contained in:
parent
1b4742167d
commit
3e542dd454
3 changed files with 54 additions and 14 deletions
|
@ -35,15 +35,13 @@
|
||||||
evil-operator-state-tag "O"
|
evil-operator-state-tag "O"
|
||||||
evil-motion-state-tag "M"
|
evil-motion-state-tag "M"
|
||||||
evil-replace-state-tag "R"
|
evil-replace-state-tag "R"
|
||||||
evil-iedit-state-tag "R+"
|
|
||||||
|
|
||||||
;; Color-coded state cursors
|
;; Color-coded state cursors
|
||||||
evil-default-cursor "orange"
|
evil-default-cursor "orange"
|
||||||
evil-normal-state-cursor 'box
|
evil-normal-state-cursor 'box
|
||||||
evil-emacs-state-cursor '("cyan" box)
|
evil-emacs-state-cursor '("cyan" box)
|
||||||
evil-insert-state-cursor 'bar
|
evil-insert-state-cursor 'bar
|
||||||
evil-visual-state-cursor 'hollow
|
evil-visual-state-cursor 'hollow)
|
||||||
evil-iedit-state-cursor 'box)
|
|
||||||
|
|
||||||
;; NOTE: a bug in emacs 25 breaks undoing in evil. See
|
;; NOTE: a bug in emacs 25 breaks undoing in evil. See
|
||||||
;; https://bitbucket.org/lyro/evil/issues/594/undo-doesnt-behave-like-vim
|
;; https://bitbucket.org/lyro/evil/issues/594/undo-doesnt-behave-like-vim
|
||||||
|
@ -270,14 +268,22 @@
|
||||||
(use-package evil-iedit-state
|
(use-package evil-iedit-state
|
||||||
:functions (iedit-current-occurrence-string iedit-restrict-region)
|
:functions (iedit-current-occurrence-string iedit-restrict-region)
|
||||||
:commands (evil-iedit-state evil-iedit-state/iedit-mode)
|
:commands (evil-iedit-state evil-iedit-state/iedit-mode)
|
||||||
|
:init
|
||||||
|
(defvar iedit-occurrence-keymap-default (make-sparse-keymap))
|
||||||
:config
|
:config
|
||||||
|
(setq evil-iedit-state-cursor 'box
|
||||||
|
evil-iedit-state-tag "R+")
|
||||||
|
|
||||||
(advice-add 'evil-force-normal-state :after 'evil-iedit-state/quit-iedit-mode)
|
(advice-add 'evil-force-normal-state :after 'evil-iedit-state/quit-iedit-mode)
|
||||||
|
|
||||||
(define-key evil-iedit-state-map (kbd "<escape>") 'evil-iedit-state/quit-iedit-mode)
|
(define-key evil-iedit-state-map (kbd "<escape>") 'evil-iedit-state/quit-iedit-mode)
|
||||||
(define-key evil-visual-state-map (kbd "SPC") 'narf:iedit-restrict-to-region)
|
(define-key evil-visual-state-map (kbd "SPC") 'narf:iedit-restrict-to-region)
|
||||||
(let ((map evil-iedit-state-map))
|
(let ((map evil-iedit-state-map))
|
||||||
;; Don't interfere with evil-snipe
|
;; Don't interfere with evil-snipe
|
||||||
(define-key map "s" nil)
|
(define-key map "s" nil)
|
||||||
(define-key map "S" nil)
|
(define-key map "S" nil)
|
||||||
|
(define-key map (kbd "M-d") 'narf/mark-and-next)
|
||||||
|
(define-key map (kbd "M-D") 'narf/mark-and-prev)
|
||||||
|
|
||||||
(define-key map "V" 'evil-visual-line)
|
(define-key map "V" 'evil-visual-line)
|
||||||
(define-key map "C" 'evil-iedit-state/substitute) ; instead of s/S
|
(define-key map "C" 'evil-iedit-state/substitute) ; instead of s/S
|
||||||
|
|
|
@ -33,17 +33,6 @@
|
||||||
(and (evil-visual-state-p)
|
(and (evil-visual-state-p)
|
||||||
(eq (evil-visual-type) 'line)))
|
(eq (evil-visual-type) 'line)))
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun narf:iedit-restrict-to-region ()
|
|
||||||
(interactive)
|
|
||||||
(if (iedit-current-occurrence-string)
|
|
||||||
(let ((current-prefix-arg '(4)))
|
|
||||||
(iedit-done)
|
|
||||||
(call-interactively 'iedit-mode)
|
|
||||||
(save-excursion (iedit-restrict-region (region-beginning) (region-end)))
|
|
||||||
(evil-previous-line))
|
|
||||||
(call-interactively 'evil-ret)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun narf*evil-exchange-off ()
|
(defun narf*evil-exchange-off ()
|
||||||
(when evil-exchange--overlays
|
(when evil-exchange--overlays
|
||||||
|
|
45
core/defuns/defuns-iedit.el
Normal file
45
core/defuns/defuns-iedit.el
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
;;; defuns-iedit.el
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun narf:iedit-restrict-to-region (&optional beg end)
|
||||||
|
(interactive)
|
||||||
|
(if (iedit-current-occurrence-string)
|
||||||
|
(let ((current-prefix-arg '(4))
|
||||||
|
(beg (or beg (region-beginning)))
|
||||||
|
(end (or end (region-end))))
|
||||||
|
(iedit-done)
|
||||||
|
(call-interactively 'iedit-mode)
|
||||||
|
(save-excursion (iedit-restrict-region beg end))
|
||||||
|
(evil-previous-line))
|
||||||
|
(call-interactively 'evil-ret)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun narf/mark-and-prev ()
|
||||||
|
(interactive)
|
||||||
|
(narf/mark-and-next t))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun narf/mark-and-next (&optional backwards-p)
|
||||||
|
(interactive)
|
||||||
|
(let ((beg evil-visual-beginning)
|
||||||
|
(end evil-visual-end)
|
||||||
|
(last-pos (point)))
|
||||||
|
(unless (bound-and-true-p evil-iedit-state-local-minor-mode)
|
||||||
|
(save-excursion
|
||||||
|
(funcall (intern (format "evil-visualstar/begin-search-%s" (if backwards-p "backward" "forward")))
|
||||||
|
beg end))
|
||||||
|
(when backwards-p
|
||||||
|
(goto-char beg))
|
||||||
|
(evil-visual-make-region beg end)
|
||||||
|
(call-interactively 'evil-iedit-state/iedit-mode)
|
||||||
|
(save-excursion
|
||||||
|
(narf:iedit-restrict-to-region beg end)))
|
||||||
|
(evil-ex-find-next nil (if backwards-p 'backward 'forward) t)
|
||||||
|
;; (evil-ex-search-next)
|
||||||
|
(evil-ex-nohighlight)
|
||||||
|
(when (and (iedit-find-current-occurrence-overlay)
|
||||||
|
(if backwards-p t (not (= last-pos (point)))))
|
||||||
|
(iedit-toggle-selection))))
|
||||||
|
|
||||||
|
(provide 'defuns-iedit)
|
||||||
|
;;; defuns-iedit.el ends here
|
Loading…
Add table
Add a link
Reference in a new issue