例如,我想使括号中的所有文本(),UPCASE。这是容易做到交互以下:Emacs:我如何在defun中用lisp函数替换regexp?
M-x query-replace-regexp
replace: "(\(.+?\))"
with : "(\,(upcase \1))"
相反,我想写一个defun
这将做到这一点:
(defun upcs()
(interactive)
(goto-char 1)
(while (search-forward "(\\(.+?\\))" nil t) (replace-match "(\\,(upcase \\1))" t nil)))
,但它不工作!虽然下面的工作(其追加foo
和bar
的括号文本):
(defun HOOK()
(interactive)
(goto-char 1)
(while (search-forward-regexp "(\\(.+?\\))" nil t) (replace-match "(foo \\1 bar)" t nil)))
如果你想消除'put-in-par',你可以:(defun upcs-luke() (interactive) (goto-char 1) (while(search-forward-regexp“(\\ (替换匹配(concat“(”(upcase(match-string 1))“)”)t nil))) – zev
同样使用'format'作为这个目的在更复杂的情况下会更好,更灵活。 – ocodo