Emacs query-replace с текстовым преобразованием

Я хочу найти в файле любой текст, который соответствует регулярному выражению в форме т[A-Z]ты (т. Е. Соответствие т, за которым следует заглавная буква, и другое совпадение ты, и преобразовать совпавший текст так, чтобы заглавная буква была строчной. регулярное выражение x[A-Z]y

xAy

становится

xay

и

xZy

становится

xzy

Функция query-replace в Emacs допускает обратные ссылки, но, AFAIK, не преобразование совпадающего текста. Есть ли встроенная функция для этого? Есть ли у кого-нибудь короткая функция Elisp, которую я мог бы использовать?

ОБНОВИТЬ

У @Marcel Levy это есть: \, в выражении замены вводит (произвольное?) Выражение Elisp. Например, решение вышеизложенного:

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase )z
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
2 770
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Похоже, что Стив Егге на самом деле уже опубликовал ответ на этот вопрос несколько лет назад: "Shiny and New: Emacs 22." Прокрутите вниз до «Изменение регистра в заменяемых строках», и вы увидите его пример кода с использованием функции replace-regexp.

Общий ответ заключается в том, что вы используете "\" для вызова любого выражения lisp как части строки замены, как в \,(capitalize ). Читая текст справки, кажется, что это только в интерактивном режиме, но кажется, что это единственное место, где это будет наиболее необходимо.

Альтернативой qrr в этом случае является запись макроса и его воспроизведение. (isearch-forward-regexp, выберите символ, downcase-region.) Я считаю, что макросы «на лету» проще, так как вы сразу получаете обратную связь, если ваше регулярное выражение неверно.

Я бы сделал это и с макросом, но только потому, что выполнение кода из строки замены для регулярного выражения для меня очень неинтуитивно. Если вы пишете пакетный сценарий или что-то, что должно выполняться очень быстро, \, безусловно, ваш путь.

Другие вопросы по теме