Запуск макроса до конца текстового файла в Emacs - PullRequest
36 голосов
/ 24 сентября 2011

У меня есть текстовый файл с некоторым примером содержимого, как показано здесь:

Sno = 1p
Sno = 2p
Sno = 3p

Я хочу удалить p из каждого столбца.С этой целью я пишу макрос:

M-x //go to buffer
C-x (//start the macro
C-s = // search for equalto sign
RET C-f C-f // reach to te alphabet 'p'
DEL // Delete
C-n  C-x )//go to new line and Close the macro definition 
C-x e

Двойное нажатие e удалит p, но если я хочу сделать то же самое до конца файла, как я могу это сделать?не могу продолжать нажимать e, если у меня есть 20000 таких строк.Что должно быть сделано ??

Пожалуйста, не предлагайте регулярное выражение, так как это пример, а не реальный случай.Пожалуйста, не предлагайте какую-либо версию elisp, мне удобно вспоминать ярлыки для emacs.

Ответы [ 4 ]

66 голосов
/ 24 сентября 2011

M-0 C-x e для повторения последнего макроса, пока не произойдет ошибка (после последней строки будет либо C-s =, либо C-n будет ошибка).

Вы можете услышать раздражающий звуковой сигнал.

15 голосов
/ 24 сентября 2011

Вы можете использовать функцию «apply-macro-to-region-lines», чтобы применить последний определенный макрос клавиатуры ко всем строкам в области. Итак, следующие шаги:

  1. Определите макрос клавиатуры (который вы уже сделали, но я добавил еще C-f в 3-ю строку):

    C-x ( C-s = RET C-f C-f C-f DEL C-n C-x)

  2. Выберите весь буфер с помощью команды «mark-whole-buffer» (по умолчанию он связан с C-x h ). Кроме того, если вы просто хотите изменить определенное количество строк, просто выберите строки, которые вы хотите изменить.

  3. Запустить функцию «apply-macro-to-region-lines» (по умолчанию она связана с C-x C-k r ).

Все р будут удалены.

1 голос
/ 24 сентября 2011

Я обычно даю имя макросу после определения его с помощью M-x name-last-kbd-macro, поэтому я могу удобно называть его с помощью Mx.И тогда я называю это с числовым префиксом.Например,

M-1000 M-x macroname

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

0 голосов
/ 24 сентября 2011

вы можете попробовать: M-20000 C-x e, чтобы выполнить все 20000 раз после определения макроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...