Emacs: замена регулярного выражения на случай изменения
Время от времени я хочу заменить все экземпляры таких значений, как:
<BarFoo>
с
<BarFoo>
то есть. сделайте регулярное выражение для замены всех вещей внутри угловых скобок с его младшим эквивалентом.
Кто-нибудь получил хороший фрагмент Lisp, который делает это? Можно с уверенностью предположить, что мы имеем дело только с значениями ASCII. Бонусные баллы за все, что достаточно общего, чтобы принять полное регулярное выражение и не просто обрабатывают пример угловых скобок. Еще больше бонусов указывает на ответ, который просто использует M-x query-replace-regexp
.
Спасибо,
Дом
Ответы
Ответ 1
Попробуйте M-x query-replace-regexp
с "<\([^>]+\)>"
в качестве строки поиска и "<\,(downcase \1)>"
в качестве замены.
Это должно работать для Emacs 22 и более поздних версий, см. этот пост в блоге Steve Yegge для более подробной информации о том, как выражения Lisp могут использоваться в строка замены.
Для более ранних версий Emacs вы можете попробовать что-то вроде этого:
(defun tags-to-lower-case ()
(interactive)
(save-excursion
(goto-char (point-min))
(while (re-search-forward "<[^>]+>" nil t)
(replace-match (downcase (match-string 0)) t))))