В редакторе Emacs возможно использование специальных макрокоманд (или макросов), которые позволяют многократно повторять один раз введенную последовательность действий.
Во время определения клавиатурного макроса происходит его первое выполнение и можно видеть, каково действие ваших команд. После этого вы можете выполнить макрос любое необходимое число раз, нажав клавишу Esc и указав затем количество повторений и команду выполнения макроса.
Команда | Назначение |
---|---|
C-x ( | Начать ввод макроса |
C-x ) | Закончить ввод макроса |
C-x e | Выполнить макрос |
Макрос сохраняется в памяти редактора до тех пор, пока не будет определен новый макрос. Если вы хотите сохранить макрос клавиатуры дольше, чем до следующего определения, то ему нужно дать имя командой M-x name-last-kbd-macro. Введите команду (можно пользоваться клавишей Tab для автопродолжения), нажмите Enter, затем введите имя макроса. Для выполнения именованного макроса наберите M-x и имя макроса.
Рассмотрим на примерах приемы создания макросов.
Пример
Заменить указанную букву в тексте многоточием, а саму букву поместить в конце слова, окружив ее фигурными скобками, например, для буквы "о" в слове "выполнить" получить "вып...лнить{о}". Для этого необходима следующая последовательность команд:
- 1) переместиться к требуемой букве;
- 2) C-x ( -- начать ввод макроса;
- 3) стрелка вправо;
- 4) C-пробел -- установить метку;
- 5) стрелка влево;
- 6) C-w -- удалить все с текущей позиции до метки;
- 7) ... -- вставить три точки;
- 8) M-f -- переместиться к концу слова;
- 9) { -- ввести левую фигурную скобку;
- 10) C-y -- вставить последний уничтоженный текст;
- 11) } -- ввести правую фигурную скобку;
- 12) C-x ) -- закончить ввод макроса.
После этого можно выполнить макрос при помощи комбинации клавиш C-x e. Сохраним данный макрос под именем one.
Теперь создадим макрос для обратной задачи: вставить вместо многоточия '...' в слове букву, стоящую в фигурных скобках в конце слова, т. е. заменить "вып...лнить{o}" на "выполнить". Приведем макрос, решающий данную задачу.
1. C-x ( 5. C-r ... 9. Backspace 2. C-s { 6. Enter 10. стрелка влево 3. стрелка влево 7. C-y 11. Backspace 4. C-k 8. Esc 3 C-d 12. C-x )
Отметим, что команда Esc 3 C-d трижды выполняет операцию удаления символа. Сохраним макрос под именем two.
Мы получили два макроса, выполняющие взаимно обратные преобразования. Убедитесь в этом, последовательно выполнив один макрос за другим: для выполнения первого наберите M-x one, для второго -- M-x two.