Some note on your code
(defun count-words-in-defun ()
"计算函数定义中单词总量"
;; NOTE: 错误的代码
(beginning-of-defun) ;; 移动位点至函数定义的开头
(let ((count 0) ;; 函数定义单词总量
;; NOTE: 可用 (cdr (bounds-of-thing-at-point 'defun)) 获取end
(end
(save-excursion (end-of-defun) (point)))) ;; 函数定义的末尾的位置
(save-excursion
(while (and
;; NOTE: re-search-forward后不需要再做这个判断, 因为保证了不会越界
(< (point) end)
;; regexp-mean:匹配1个或多个构词要素字符或构成符号字符以及后面除了空白字符之外
;; 的字符和再后面加上任意数目的空白字符。
(re-search-forward "\\(\\w\\|\\s_\\)+[^ \t\n]*[ \t\n]*" end t))
;; NOTE: 可用(cl-incf count) 代替
(setq count (1+ count))))
count))
(defun count-words-defun-file ()
(save-excursion
(let ((lengths-list))
(goto-char (point-min))
(while (re-search-forward "^(defun" nil t)
;; NOTE: 可用 (push (count-words-in-defun) lengths-list) 代替
(setq lengths-list
(cons (count-words-in-defun) lengths-list)))
lengths-list)))
另:可以花点时间了解rx生成正则表达式