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

Интерактивная замена регулярных выражений Emacs

Предположим, что у вас есть текст со следующими словами внутри:

"foo" ... "bar" ... "file" ... "emacs"

и все, что вы хотите сделать, это заменить "на". Я знаю, что это может быть сделано только с просьбой о следующей замене:

" -> ''

но предположим, что вы хотели бы сделать это интерактивно и с регулярным выражением, для более сложного случая, как это можно сделать?

Я объясняю себя лучше: я бы хотел, чтобы у меня была команда или их серия, чтобы работать таким образом:

  • Напишите регулярное выражение, например "\\(.*?\\)", и просмотрите результаты в интерактивном режиме (т.е. в настоящее время видимые совпадения выделяются при редактировании регулярного выражения, а подсветка всегда обновляется по мере внесения изменений).
  • Когда вы довольны регулярным выражением, укажите замену, например ' '\1' '
  • Интерактивно заменить все соответствия
4b9b3361

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

Подробная информация находится на странице руководства.