Подтвердить что ты не робот

Emacs: замена регулярного выражения на случай изменения

Время от времени я хочу заменить все экземпляры таких значений, как:

<BarFoo>

с

<BarFoo>

то есть. сделайте регулярное выражение для замены всех вещей внутри угловых скобок с его младшим эквивалентом.

Кто-нибудь получил хороший фрагмент Lisp, который делает это? Можно с уверенностью предположить, что мы имеем дело только с значениями ASCII. Бонусные баллы за все, что достаточно общего, чтобы принять полное регулярное выражение и не просто обрабатывают пример угловых скобок. Еще больше бонусов указывает на ответ, который просто использует M-x query-replace-regexp.

Спасибо,

Дом

4b9b3361

Ответ 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))))