Могу ли я использовать счетчик макросов клавиатуры emacs в качестве префикса команды? - PullRequest
3 голосов
/ 03 апреля 2012

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

Например, вместо вставки 3 в буфер при третьем выполнении макроса, я хотел бы иметь возможность выполнить Cu 3 Mx my-command , затем Cu 4 Mx my-command на следующей итерации.

IsЕсть ли способ создать макрос клавиатуры, который делает это?Моя конкретная задача - «сжать» два блока текста в одном буфере вместе, но даже если есть альтернативный способ сделать эту конкретную вещь, было бы хорошо узнать ответ на общий вопрос.


В ответ на комментарий @phils:

Примером того, что я пытаюсь сделать, было бы превращение

<<<<< mine
foo
bar
wimble
gleet
=====
gimble
gyre
wade
foobarbaz
>>>>> r345

в

<<<<< mine
foo
gimble
bar
gyre
wimble
wade
gleet
foobarbaz
=====
>>>>> r345

Но опять же, меня больше интересует "есть ли возможность для этого?"чем "как мне решить эту конкретную проблему"?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

Таким образом, экспериментально (хотя и кратко; YMMV) кажется, что настройка prefix-arg эффективна. Таким образом, у вас может быть такой макрос (который вставляет увеличивающееся число букв q в каждой строке).

C-x b      ;; switch-to-buffer
*counter*  ;; self-insert-command * 9
RET        ;; indent-new-comment-line
<f3>       ;; kmacro-start-macro-or-insert-counter
C-SPC      ;; set-mark-command
C-a        ;; my-beginning-of-line-or-indentation
C-w        ;; kill-region
C-x b      ;; switch-to-buffer
RET        ;; indent-new-comment-line
M-:        ;; eval-expression
(setq      ;; self-insert-command * 5
SPC        ;; self-insert-command
prefix-arg ;; self-insert-command * 10
SPC        ;; self-insert-command
C-y        ;; yank
)          ;; self-insert-command
RET        ;; indent-new-comment-line
q          ;; self-insert-command
C-e        ;; move-end-of-line
RET        ;; indent-new-comment-line
1 голос
/ 03 апреля 2012

AFAIK, вы можете вставить только макрос счетчика в буфер.Когда у вас начинаются большие макросы, вам лучше написать для них функцию.

...