Интерактивная замена регулярных выражений Emacs
Предположим, что у вас есть текст со следующими словами внутри:
"foo" ... "bar" ... "file" ... "emacs"
и все, что вы хотите сделать, это заменить "на". Я знаю, что это может быть сделано только с просьбой о следующей замене:
" -> ''
но предположим, что вы хотели бы сделать это интерактивно и с регулярным выражением, для более сложного случая, как это можно сделать?
Я объясняю себя лучше: я бы хотел, чтобы у меня была команда или их серия, чтобы работать таким образом:
- Напишите регулярное выражение, например
"\\(.*?\\)"
, и просмотрите результаты в интерактивном режиме (т.е. в настоящее время видимые совпадения выделяются при редактировании регулярного выражения, а подсветка всегда обновляется по мере внесения изменений).
- Когда вы довольны регулярным выражением, укажите замену, например
' '\1' '
- Интерактивно заменить все соответствия
Ответы
Ответ 1
Наконец-то я узнал!!!!!
Это следующие шаги:
-
M-x isearch-forward-regexp
-
Вставьте свое регулярное выражение в интерактивном режиме. Если вы допустили ошибку, вы можете использовать DEL или M-e и перемещаться по вашему регулярному выражению, чтобы исправить ее.
-
Затем, после того, как вы сразу найдете то, что хотите, нажмите M-% и замените понравившийся вам вариант и начните замену.
Таким образом, вы можете искать и заменять регулярным выражением в общем интерактивном и инкрементальном режиме.
Ответ 2
Соответствует ли команда query-replace-regexp
вашим требованиям? На большинстве установок Emacs он будет привязан к C-M-%
.
Так как это не удовлетворяет требованиям OP, предложите также посмотреть re-builder
. Эта функция не задокументирована в руководстве Emacs или справочной системе, она как раз документирована в руководстве Emacs Lisp.
Ответ 3
-
Запустите M-x isearch-forward-regexp
или C-M-s
.
-
Когда вы начнете вводить регулярное выражение, первое вхождение будет мгновенно подсвечено. Попытка вернуться через регулярное выражение с помощью курсора отменяет поиск, поэтому, если вы допустили ошибку, вы должны использовать M-e
, чтобы разрешить редактирование, внести изменения, а затем нажмите enter, чтобы продолжить поиск.
-
Когда вы довольны регулярным выражением, нажмите M-%
, введите заменяющую строку (или используйте клавишу "вверх" для доступа к ранее используемым строкам замены), затем нажмите RET
, чтобы начать интерактивную замену.
-
Для каждого события нажмите y
, чтобы заменить один раз, n
, чтобы пропустить, !
, чтобы заменить все, RET
для выхода или ?
, чтобы увидеть дополнительные параметры.
-
Чтобы повторить ваш последний поиск в регулярном выражении, введите C-M-s
, затем C-s
.
Подробная информация находится на странице руководства.