Emacs для начинающих

       

Поиск и замена текста


Команда поиска в большинстве версий Emacs реализована в виде, так называемого, "инкрементного поиска" ("incremental search"). Нажмите C-s и введите образец для поиска в строку минибуфера "n". По мере ввода текста курсор будет перемещаться по тексту выделяя обнаруженные с образцом совпадения.

Пример. Пусть требуется найти слово "hazel" в приведенном ниже тексте. После того, как в окне минибуфера будет напечатана буква "h", курсор перепрыгнет в следующую позицию после первой обнаруженной буквы "h" (см. рис. Результаты инкрементного поиска после ввода первого символа.).


Результаты инкрементного поиска после ввода первого символа.

После того, как будет набрана следующая буква - "a", курсор перепрыгнет в "n" слова "than" - следующую позицию после обнаруженного образца "ha" (см. рис. Результаты инкрементного поиска после ввода второго символа.).


Результаты инкрементного поиска после ввода второго символа.

Напечатайте "z" и курсор перейдет в "e" после фрагмента "haz" в слове "hazel" (см. рис. ).


Результаты инкрементного поиска после ввода третьего символа.

Если Emacs не смог найти образец в тексте, то в окне минибуфера появится соответствующее сообщение. Например, если вместо "haz" набрать "hazx", то в окне минибуфера появится сообщение:

Failing I-search: hazx

Если искомый фрагмент найден и нужно найти следующий, нажмите C-s еще раз. Чтобы остановить процесс поиска нажмите Enter.

Другая полезная клавиша при поиске - это клавиша Backspace. Ее используют, чтобы удалить последствия последней нажатой в окне минибуфера. Например, в рассмотренной выше ситуации если нажать Backspace после нажатия "z", когда Emacs нашел фрагмент "haz", курсор перепрыгнет обратно в слово "than", обнаруженное по фрагменту "ha".

Поиск по тексту в обратном направлении осуществляется точно также, как поиск в прямом направлении, с той лишь разницей, что для запуска команды поиска нужно нажать C-r. Точно так же поиск будет осуществляться в соответствии с вводимыми в образец буквами, пока либо Emacs не сможет найти образец в тексте, либо пользователь не прервет операцию поиска нажатием клавиши Enter. Точно также для поиска в обратном направлении работает клавиша Backspace.


В редакторе Emacs есть несколько команд осуществляющих операции замены (Search and Replace). Наиболее универсальная команда query-replace запускается при нажатии комбинации M-% или из пункта меню Query Replace... (меню Edit). При нажатии M-% в окне минибуфера появляется сообщение:

Query replace:
Введите строку, которую нужно заменить и нажмите Enter. Допустим нужно заменить фразу "my fault" на фразу "your fault". После того, как введена строка для поиска - "my fault" - и нажат ввод, в окне минибуфера появится следующее сообщение:

Query replace my fault with:
Введите строку для замены - "your fault" и нажмите Enter. После этого Emacs попытается сначала найти строку в соответствии со строкой для поиска. Если образец не найден, то в окне минибуфера появится сообщение: Replaced 0 occurrences. Если образец обнаружен, то появится сообщение:

Query replacing my fault with your fault: (? for help)
Нажмите ?, и на экране появится список опций. Наиболее важные из них следующие:
y Заменить найденный фрагмент и искать следующий. Тот же эффект дает нажатие пробела.
n Замену не проводить, искать следующий.
q Замену не проводить. Прекратить операцию поиска.
! Заменить все обнаруженные в тексте фрагменты без дополнительного подтверждения.

Содержание раздела