我正在(愉快地(完成Emacs Lisp编程入门,并解决了第一个8.7搜索练习。 它指出,
编写一个搜索字符串的交互式函数。如果 搜索查找字符串,在其后留下点并显示消息 上面写着"找到了!
我的解决方案是
(defun test-search (string)
"Searches for STRING in document.
Displays message 'Found!' or 'Not found...'"
(interactive "sEnter search word: ")
(save-excursion
(beginning-of-buffer)
(setq found (search-forward string nil t nil)))
(if found
(progn
(goto-char found)
(message "Found!"))
(message "Not found...")))
如何使found
成为函数的本地? 我知道 let
语句定义了一个局部变量。 但是,我只想在找到string
时才移动点。 我不清楚如何在本地定义found
,但如果未找到string
,则不要将点设置为beginning-of-buffer
。 在这种情况下,let
正确的命令吗?
正如一些评论中所述,let
是您要在此处使用的,尽管它不会定义函数的局部变量,而是定义自己的范围。
您的代码变为:
(defun test-search (string)
"Searches for STRING in document.
Displays message 'Found!' or 'Not found...'"
(interactive "sEnter search word: ")
(let ((found (save-excursion
(goto-char (point-min))
(search-forward string nil t nil))))
(if found
(progn
(goto-char found)
(message "Found!"))
(message "Not found..."))))
编辑:由于菲尔斯的评论,代码被修改了。