Різноманітні команди – ЧАСТИНА 11

313  Клавіатурні макроси

Клавіатурний макрос – це певна користувачем команда, що позначає іншу послідовність ключів Наприклад, якщо ви виявили, що вам потрібно набрати Cn Cd сорок разів, то ви можете прискорити роботу, визначивши клавіатурний макрос для Cn Cd і викликавши його з лічильником повторень 40

Cx (Почати визначення клавіатурного макросу (start-kbd-macro)

Cx) Закінчити визначення клавіатурного макросу (end-kbd-macro)

Cx e Виконати самий останній клавіатурний макрос (call-last-kbd-macro)

Cu Cx (Заново виконати останній клавіатурний макрос і потім додати додаткового-

тільні ключі до його визначення

Cx q Коли досягається ця точка при виконанні макросу, зробити запит про під-

дження (kbd-macro-query)

M-x name-last-kbd-macro

Поставити імя команди (на час поточного сеансу) для останнього певного клавіатурного макросу

M-x insert-kbd-macro

Вставити в буфер визначення клавіатурного макросу як код на Ліспі

Cx Ck Відредагувати раніше визначений клавіатурний макрос (edit-kbdmacro)

M-x apply-macro-to-region-lines

Запустити останній клавіатурний макрос на кожній повної рядку в обла-

сти

Клавіатурні макроси відрізняються від звичайних команд Emacs тим, що вони написані на командному мовою Emacs, а не на Ліспі Це полегшує їх написання для новачків і робить їх більш зручними в якості тимчасових хаков Однак, потужності командного мови

Emacs як мови програмування недостатньо, щоб він був зручним для написання чогось розумного або універсального Для таких речей треба використовувати Лісп

Ви визначаєте клавіатурні макроси під час виконання команд, які є визначенням Кажучи іншими словами, під час визначення клавіатурного макросу його визначення виконується вперше Таким чином, ви можете бачити, яке дію ваших команд, так що ви не повинні прораховувати його в розумі Коли ви закінчили, макрос клавіатури визначений, а також один раз фактично виконаний Після цього ви можете знову і знову виконувати всі цілком, викликаючи макрос

3131  Основи використання

Для початку визначення клавіатурного макросу наберіть команду Cx ((start-kbdmacro) Починаючи з цього моменту ваші натискання на клавіші раніше виконуються, але також стають частиною визначення макросу У рядку режиму зявляється слово

‘Def, щоб нагадати вам про те, що відбувається Коли ви закінчите, команда Cx)

(End-kbd-macro) закінчить визначення макросу (але не стане його частиною) Наприклад,

C-x ( M-f  foo  C-x )

визначає макрос для переміщення вперед на слово і вставки foo.

Визначений таким чином макрос може запускатися знову за допомогою команди Cx e (call-last-kbd-macro), в якості числового аргументу якої можна задати лічильник повторів для багаторазового виконання макросу Команді Cx) також можна задати лічильник повторів як аргумент, в цьому випадку саме стільки разів вона повторює макрос відразу після його визначення, але саме визначення макросу зараховується як перший повторення (так як воно виконується в той час, як ви його визначаєте) Таким чином, Cx) з аргументом 4 призводить до безпосереднього виконання макросу ще 3 рази Аргумент 0 для C-x e або Cx) означає повторення макросу нескінченне число разів (поки він не отримає помилку, або ви не наберете Cg або, в MS-DOS, C-hBREAKi)

Якщо ви хочете повторювати операцію в регулярно розташованих місцях в тексті, то визначте макрос і включіть в нього команди для пересування до наступного місця, в якому ви хочете його використовувати Наприклад, якщо ви хочете змінити кожен рядок, вам потрібно поставити крапку в початок рядка і визначити макрос, що змінює цю рядок і переміщає крапку в початок наступного рядка Після цього повторення макросу буде обробляти рядки одну за одною

Після того як ви завершили визначення макросу, ви можете додати щось на його кінець, набравши Cu Cx) Це еквівалентно звичайної Cx (, за якою слід повторний набір всього наявного до цих пір визначення Як наслідок цього, вона повторно виконає макрос, як було визначено раніше

Ви можете використовувати в клавіатурних макроси функціональні клавіші, точно так само, як клавіші клавіатури Ви навіть можете використовувати події від миші, але будьте уважні з ними: коли макрос програє подія миші, він використовує оригінальну позицію миші для цієї події, ту, яку миша мала під час визначення макросу Що може при цьому статися, важко передбачити (Ефект від використання поточної позиції миші був би ще менш передбачуваний)

Одна з речей, яка не завжди правильно працює в клавіатурних макроси, – це команда CMc (exit-recursive-edit) Коли ця команда виводить з рекурсивного редагування, яке було розпочато всередині макросу, то вона працює так, як ви очікували Але якщо ви виходите з рекурсивного редагування, яке було розпочато до того, як ви запустили клавіатурний макрос, то також відбувається вихід з клавіатурного макросу як з частини цього процесу

Ви можете відредагувати вже існуючий клавіатурний макрос, використовуючи Cx

C-k (edit-kbd-macro) Потім ви повинні ввести те, що ви будете використовувати для

виклику макросу – Cx e або Mx імя або якусь іншу послідовність ключів Це форматує визначення макросу в буфері і входить до спеціального основний режим для його редагування Наберіть в цьому буфері Ch m, щоб отримати подробиці про редагування макросу Коли ви закінчите редагування, натисніть Cc Cc

Команда Mx apply-macro-to-region-lines повторює останній певний клавіатурний макрос для кожної повної рядка всередині поточної області Вона робить це рядок за рядком, переміщаючи точку в початок рядка і виконуючи потім макрос

3132  Іменування і збереження клавіатурних макросів

Якщо ви хочете зберегти макрос клавіатури довше, ніж до наступного визначення, то ви повинні дати йому імя, використовуючи Mx name-last-kbd-macro Ця команда зчитує імя як аргумент, використовуючи мінібуфер, і визначає це імя для виконання макросу Імя макросу – це лісповскій символ, а визначення його таким способом робить його допустимим імям команди для виклику за допомогою Mx або для привязування ключа за допомогою global-set-key (див Розділ 3141 [Таблиці ключів], с 356) Якщо ви вкажете імя, вже має визначення, відмінне від макросу клавіатури, то друкується повідомлення про помилку, і нічого не змінюється

Коли макрос отримує імя команди, ви можете записати його визначення в файл Потім його можна буде використати в іншому сеансі редагування Спочатку зверніться до файлу, в якому хочете записати визначення Потім використовуйте цю команду:

M-x insert-kbd-macro hRETi  імямакро hRETi

Це вставляє Лісп-код, який, будучи виконаний пізніше, визначить той же самий макрос з тим же самим визначенням, яке він має зараз (Щоб зробити це, вам не потрібно розбиратися в Лісп-коді, так як insert-kbd-macro напише його за вас) Потім збережіть файл Пізніше ви можете завантажити цей файл за допомогою load-file (див Розділ 237 [Бібліотеки Лиспа], с 253) Якщо файл, в який ви записуєте, є вашим файлом ініціалізації ~ / emacs (див Розділ 317 [Файл ініціалізації], с 366), то макрос буде визначатися кожен раз, коли ви запускаєте Emacs

Якщо ви задасте команді insert-kbd-macro числовий аргумент, то вона створить додатковий Лісп-код для запису ключів (якщо вони є), які ви привязали до макросу клавіатури таким чином, коли ви завантажте файл, макрос будуть знову привязаний до тих же самим ключам

3133  Виконання макросу з варіаціями

Використовуючи Cx q (kbd-macro-query), ви можете досягти ефекту, схожого з дією query-replace, коли макрос кожен раз запитує у вас, чи повинен він робити зміни Під час визначення макросу наберіть Cx q в тій точці, де ви хочете отримувати запит При визначенні макросу ця команда нічого не робить, але коли ви запускаєте макрос, то Cx q справить інтерактивний запит про продовженні дій

Правильними відповідями на запит від Cx q є hSPCi  (Або y), hDELi  (Або n), hRETi (Або q), C-l і C-r Відповіді ті ж самі, що і для query-replace, хоча не всі варіанти відповіді для query-replace мають сенс

Ці відповіді включають hSPCi  для продовження, а hDELi  для пропуску залишку цього повторення макросу і початку нового повторення макросу hRETi  означає пропуск залишку даного повторення і скасування інших повторень Cl перемальовує екран і знову робить запит

Cr входить на рівень рекурсивного редагування, де ви можете виконати ре-

дактірованіе, яка не є частиною макросу Коли ви вийдете з рекурсивного

редагування за допомогою CMc, у вас знову запитають про те, як продовжувати виконання клавіатурного макросу Якщо тоді ви натиснете hSPCi, То буде виконаний залишок макросу

Cu Cx q, тобто Cx q з числовим аргументом, здійснює абсолютно іншу функцію Вона входить до рекурсивне редагування, зчитуючи введення з клавіатури, і коли ви набираєте його під час визначення макросу, і коли він виконується з макросу Під час визначення, редагування, яке ви робите всередині рекурсивного редагування, не стає частиною макросу Під час виконання макросу рекурсивне редагування дає вам можливість виконати якесь особливе редагування в кожному повторенні Див Розділ 3012 [Рекурсивне редагування], с 338

Джерело: Річард Столмен, Керівництво по GNU Emacs

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*