我正在研究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
但同样,我更感兴趣的是“这有什么设施吗?”比“我该如何解决这个具体问题”?
答案 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,您只能将宏计数器插入缓冲区。 当你开始拥有大型宏时,你最好为它编写一个函数。