例如,我想使括號中的所有文本(),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