Практическая информатика

       

Клавиатурные макросы


В редакторе Emacs возможно использование специальных макрокоманд (или макросов), которые позволяют многократно повторять один раз введенную последовательность действий.

Во время определения клавиатурного макроса происходит его первое выполнение и можно видеть, каково действие ваших команд. После этого вы можете выполнить макрос любое необходимое число раз, нажав клавишу Esc и указав затем количество повторений и команду выполнения макроса.

КомандаНазначение
C-x (Начать ввод макроса
C-x )Закончить ввод макроса
C-x eВыполнить макрос

Макрос сохраняется в памяти редактора до тех пор, пока не будет определен новый макрос. Если вы хотите сохранить макрос клавиатуры дольше, чем до следующего определения, то ему нужно дать имя командой M-x name-last-kbd-macro. Введите команду (можно пользоваться клавишей Tab для автопродолжения), нажмите Enter, затем введите имя макроса. Для выполнения именованного макроса наберите M-x и имя макроса.

Рассмотрим на примерах приемы создания макросов.

Пример

Заменить указанную букву в тексте многоточием, а саму букву поместить в конце слова, окружив ее фигурными скобками, например, для буквы "о" в слове "выполнить" получить "вып...лнить{о}". Для этого необходима следующая последовательность команд:

  • переместиться к требуемой букве;
  • C-x ( - начать ввод макроса;
  • стрелка вправо;
  • C-пробел - установить метку;
  • стрелка влево;
  • C-w - удалить все с текущей позиции до метки;
  • ... - вставить три точки;
  • M-f - переместиться к концу слова;
  • { - ввести левую фигурную скобку;
  • C-y - вставить последний уничтоженный текст;
  • } - ввести правую фигурную скобку;
  • C-x ) - закончить ввод макроса.

После этого можно выполнить макрос при помощи комбинации клавиш C-x e. Сохраним данный макрос под именем one.

Теперь создадим макрос для обратной задачи: вставить вместо многоточия '...' в слове букву, стоящую в фигурных скобках в конце слова, т. е. заменить "вып...лнить{o}" на "выполнить". Приведем макрос, решающий данную задачу.


1. C-x (5. C-r ...9. Backspace
2. C-s {6. Enter10. стрелка влево
3. стрелка влево7. C-y11. Backspace
4. C-k8. Esc 3 C-d12. C-x )
Отметим, что команда Esc 3 C-d трижды выполняет операцию удаления символа. Сохраним макрос под именем two.

Мы получили два макроса, выполняющие взаимно обратные преобразования. Убедитесь в этом, последовательно выполнив один макрос за другим: для выполнения первого наберите M-x one, для второго - M-x two.


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