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-motion-state-tag "M"
|
||||
evil-replace-state-tag "R"
|
||||
evil-iedit-state-tag "R+"
|
||||
|
||||
;; Color-coded state cursors
|
||||
evil-default-cursor "orange"
|
||||
evil-normal-state-cursor 'box
|
||||
evil-emacs-state-cursor '("cyan" box)
|
||||
evil-insert-state-cursor 'bar
|
||||
evil-visual-state-cursor 'hollow
|
||||
evil-iedit-state-cursor 'box)
|
||||
evil-visual-state-cursor 'hollow)
|
||||
|
||||
;; NOTE: a bug in emacs 25 breaks undoing in evil. See
|
||||
;; https://bitbucket.org/lyro/evil/issues/594/undo-doesnt-behave-like-vim
|
||||
|
@ -270,14 +268,22 @@
|
|||
(use-package evil-iedit-state
|
||||
:functions (iedit-current-occurrence-string iedit-restrict-region)
|
||||
:commands (evil-iedit-state evil-iedit-state/iedit-mode)
|
||||
:init
|
||||
(defvar iedit-occurrence-keymap-default (make-sparse-keymap))
|
||||
: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)
|
||||
|
||||
(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)
|
||||
(let ((map evil-iedit-state-map))
|
||||
;; Don't interfere with evil-snipe
|
||||
(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 "C" 'evil-iedit-state/substitute) ; instead of s/S
|
||||
|
|
|
@ -33,17 +33,6 @@
|
|||
(and (evil-visual-state-p)
|
||||
(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
|
||||
(defun narf*evil-exchange-off ()
|
||||
(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