Na przykład chcę zrobić cały tekst w nawiasach,(), UPCASE. To trywialne wykonać następujące czynności interaktywnie:Emacs: w jaki sposób mogę zastąpić wyrażenie regexp za pomocą funkcji selekcji w defun?
M-x query-replace-regexp
replace: "(\(.+?\))"
with : "(\,(upcase \1))"
Zamiast Chcę napisać defun
który zrobi to:
(defun upcs()
(interactive)
(goto-char 1)
(while (search-forward "(\\(.+?\\))" nil t) (replace-match "(\\,(upcase \\1))" t nil)))
ale to nie działa! Natomiast następujące prace (dołącza foo
i bar
do tekstów nawiasach):
(defun HOOK()
(interactive)
(goto-char 1)
(while (search-forward-regexp "(\\(.+?\\))" nil t) (replace-match "(foo \\1 bar)" t nil)))
Jeśli chcesz wyeliminować "put-in-par", możesz zrobić: (defun upcs-luke() (interaktywny) (goto-char 1) (podczas (search-forward-regexp "(\\ ([^ \\)] + \\)) "nil t) (zamień-zapakuj (concat" ("(upcase (string-match 1))") ") t nil))) – zev
Również używając' format' dla ten cel byłby ładniejszy i bardziej elastyczny w bardziej skomplikowanych przypadkach. – ocodo