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

3
我正在emacs上开发一个项目,想使用一个键盘宏,每次迭代时都稍作更改。当我在手册中看到keyboard macro counter时,那似乎正是我所需要的 - 但据我所知,它会在当前缓冲区中插入递增的数字。我想将递增的数字用作另一个命令的前缀。
例如,在第三次执行宏时,我想执行C-u 3M-x my-command,然后在下一次迭代时执行C-u 4M-x my-command,而不是在缓冲区中插入3
有没有办法创建这样的键盘宏?我的具体任务是在同一缓冲区中“压缩”两个文本块,但即使有其他方法来完成这个特定的任务,了解一般问题的答案也很好。
作为您的助手,我可以翻译以下内容:

回应@phils的评论:

我试图做的一个例子是将

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

进入

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

但是,我更感兴趣的是“是否有这方面的设施?”而不是“如何解决这个具体问题”?


你能否给我们一个“将两个文本块压缩在同一缓冲区中”的示例,包括之前和之后的效果? - phils
2个回答

3

实验性地(尽管短暂,结果可能会有所不同),似乎设置 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
据我所知,您只能在缓冲区中插入宏计数器。 当您开始使用大型宏时,最好为其编写一个函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接