关于cl-flet cl-letf 用法不解

我打算让vterm 支持evil 的d 命令,即删除功能。 但是现在遇到了一个问题,可以用下面的代码来验证

下面这种用法似乎是死循环

(defun vterm-evil-delete ()
  ""
  (interactive)
  (let ((inhibit-read-only t))
    (cl-letf (
              ((symbol-function 'delete-region)
               #'(lambda (start end)
                   (message "vterm版的delete-region实现, 里面会调用delete-region ,所以出现死循环,各有大佬有何解题思路没")
                   (delete-region start end))))
      (call-interactively 'func1))))

(defun func1()
  (interactive)
  (delete-region 1 2))
(cl-letf* ((inner (symbol-function #'delete-region))
           ((symbol-function #'delete-region)
             (lambda (start end)
               (funcall inner start end)))))