Function: evil-move
evil-move is an interactive and byte-compiled function defined in
evil-commands.el.
Signature
(evil-move BEG END ADDRESS)
Documentation
Move lines in BEG .. END below the line given by ADDRESS.
Key Bindings
Source Code
;; Defined in ~/.emacs.d/elpa/evil-20251108.138/evil-commands.el
(evil-define-command evil-move (beg end address)
"Move lines in BEG .. END below the line given by ADDRESS."
:motion evil-line-or-visual-line
(interactive "<r><addr>")
(unless (= (1+ address) (line-number-at-pos beg))
(goto-char (point-min))
(forward-line address)
(let* ((m (set-marker (make-marker) (point)))
(txt (buffer-substring-no-properties beg end))
(len (length txt))
(last-line-blank (progn (goto-char (point-max)) (bolp))))
(delete-region beg end)
(unless last-line-blank ; as vim, preserve lack of blank last line
(progn (goto-char (point-max)) (when (bolp) (delete-char -1))))
(goto-char m)
(set-marker m nil)
;; ensure text consists of complete lines
(when (or (zerop len) (/= (aref txt (1- len)) ?\n))
(setq txt (concat txt "\n")))
(when (and (eobp) (not (bolp))) (newline)) ; incomplete last line
(when (evil-visual-state-p)
(move-marker evil-visual-mark (point)))
(insert txt)
(forward-line -1)
(when (evil-visual-state-p)
(move-marker evil-visual-point (point))))))