我可以使用emacs键盘宏计数器作为命令前缀吗?

时间:2012-04-02 23:25:02

标签: emacs elisp

我正在研究emacs中的一个项目,我想使用一个键盘宏,每次迭代都会略有变化。当我在手册中看到keyboard macro counter时,看起来就像我需要的那样 - 但据我所知,在当前缓冲区中插入一个递增的数字。我想使用递增数字作为另一个命令的前缀。

例如,我不想在第三次执行宏时将3插入缓冲区,而是希望能够执行 Cu 3 Mx my-command ,然后在下一次迭代中使用 Cu 4 Mx my-command

有没有办法创建一个键盘宏来执行此操作?我的具体任务是将同一个缓冲区中的两个文本块“压缩”在一起,但即使有另一种方法来完成这个特定的事情,也应该知道一般问题的答案。


回应@phils的评论:

我正在尝试做的一个例子是转

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

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

但同样,我更感兴趣的是“这有什么设施吗?”比“我该如何解决这个具体问题”?

2 个答案:

答案 0 :(得分:2)

因此,通过实验(虽然简要; 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 :(得分:1)

AFAIK,您只能将宏计数器插入缓冲区。 当你开始拥有大型宏时,你最好为它编写一个函数。