branch: elpa/evil commit a4b19105b930498973d96d879c0c8d846840fa8e Author: Tom Dalziel <tom...@hotmail.com> Commit: Tom Dalziel <33435574+tomd...@users.noreply.github.com>
Replace state evil-delete-backward-word --- evil-commands.el | 19 +++++++++---------- evil-tests.el | 46 +++++++++++++++++++++++++++++----------------- 2 files changed, 38 insertions(+), 27 deletions(-) diff --git a/evil-commands.el b/evil-commands.el index e764857..d34abfd 100644 --- a/evil-commands.el +++ b/evil-commands.el @@ -1578,16 +1578,15 @@ be joined with the previous line if and only if (evil-define-command evil-delete-backward-word () "Delete previous word." - (if (and (bolp) (not (bobp))) - (progn - (unless evil-backspace-join-lines (user-error "Beginning of line")) - (delete-char -1)) - (delete-region (max - (save-excursion - (evil-backward-word-begin) - (point)) - (line-beginning-position)) - (point)))) + (let ((beg (save-excursion (evil-backward-word-begin) (point))) + (end (point))) + (cond + ((evil-replace-state-p) (while (< beg (point)) + (evil-replace-backspace))) + ((or (not (bolp)) (bobp)) (delete-region (max beg (line-beginning-position)) + end)) + (evil-backspace-join-lines (delete-char -1)) + (t (user-error "Beginning of line"))))) (evil-define-command evil-delete-back-to-indentation () "Delete back to the first non-whitespace character. diff --git a/evil-tests.el b/evil-tests.el index c17c97c..2cd80bd 100644 --- a/evil-tests.el +++ b/evil-tests.el @@ -2079,24 +2079,36 @@ ine3 line3 line3 l\n"))) "line1\n\n[\n]last line\n"))) (ert-deftest evil-test-delete-backward-word () - "Test `evil-delete-backward-word' in insert state." + "Test `evil-delete-backward-word' in insert & replace states." :tags '(evil) - (let ((evil-backspace-join-lines t)) - (evil-test-buffer - "abc def\n ghi j[k]l\n" - ("i" (kbd "C-w")) - "abc def\n ghi [k]l\n" - ((kbd "C-w")) - "abc def\n [k]l\n" - ((kbd "C-w")) - "abc def\n[k]l\n" - ((kbd "C-w")) - "abc def[k]l\n")) - (let (evil-backspace-join-lines) - (evil-test-buffer - "abc def\n[k]l\n" - (should-error (execute-kbd-macro (concat "i" (kbd "C-w")))) - "abc def\n[k]l\n"))) + (ert-info ("evil-delete-backward-word in insert state") + (let ((evil-backspace-join-lines t)) + (evil-test-buffer + "abc def\n ghi j[k]l\n" + ("i" (kbd "C-w")) + "abc def\n ghi [k]l\n" + ((kbd "C-w")) + "abc def\n [k]l\n" + ((kbd "C-w")) + "abc def\n[k]l\n" + ((kbd "C-w")) + "abc def[k]l\n")) + (let (evil-backspace-join-lines) + (evil-test-buffer + "abc def\n[k]l\n" + (should-error (execute-kbd-macro (concat "i" (kbd "C-w")))) + "abc def\n[k]l\n"))) + (ert-info ("evil-delete-backward-word in replace state") + (evil-test-buffer + "alpha bravo [c]harlie delta" + ("R" "one two") + "alpha bravo one two[ ]delta" + ("\C-w") + "alpha bravo one [l]ie delta" + ("\C-w") + "alpha bravo [c]harlie delta" + ("\C-w") + "alpha [b]ravo charlie delta"))) (ert-deftest evil-test-delete-back-to-indentation () "Test `evil-delete-back-to-indentation' in insert state."