            (let ((old-path (buffer-file-name))
                  (new-path (expand-file-name new-path)))
              (when-let (dest (doom--copy-file old-path new-path force-p))
+               (doom--forget-file old-path)
                (when (file-exists-p old-path)
                  (delete-file old-path))
+               (mapc #'doom--update-file
+                     (delq
+                      nil (list (or (ignore-errors
+                                      (file-equal-p (doom-project-root old-path)
+                                                    (doom-project-root new-path)))
+                                    old-path)
+                                new-path)))
                (kill-current-buffer)
-               (doom--forget-file old-path new-path)
-               (doom--update-file new-path)
                (find-file new-path)
                (message "File successfully moved to %s" dest))))
     (`overwrite-self (error "Cannot overwrite self"))

    (vc-file-clearprops path)
    (vc-resynch-buffer path nil t))
  (when (featurep 'magit)
    (magit-refresh)))

(defun doom--copy-file (old-path new-path &optional force-p)
  (let* ((new-path (expand-file-name new-path))

;;
;;; Helpers

(defun doom--forget-file (path)
  "Ensure `recentf', `projectile' and `save-place' forget OLD-PATH."
  (when (bound-and-true-p recentf-mode)
    (recentf-remove-if-non-kept path))
  (when (and (bound-and-true-p projectile-mode)
             (doom-project-p)
             (projectile-file-cached-p path (doom-project-root)))
    (projectile-purge-file-from-cache path))
  (when (bound-and-true-p save-place-mode)
    (save-place-forget-unreadable-files)))

