2012-04-02 37 views
2

我正在使用emacs中的项目,我希望使用每次迭代时略微改变的键盘宏。当我看到手册中的keyboard macro counter时,看起来正是我所需要的 - 但据我所知,它在当前缓冲区中插入一个递增数字。我想使用递增的数字作为另一个命令的前缀。我可以使用emacs键盘宏计数器作为命令前缀吗?

例如,而不是插入3插入宏的第三执行缓冲,我想能够执行的Cu 3的Mx我的命令,随后的Cu 4的Mx我的命令在下一次迭代。

有没有办法创建一个键盘宏来做到这一点?我的具体任务是将同一个缓冲区中的两个文本块“压缩”在一起,但即使有另一种方法来完成这个特定的事情,也很好地了解一般问题的答案。


针对@phils'评论:

的什么,我试图做的就是一个例子把

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

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

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

+0

你能否给我们一个前后两个例子的“在同一个缓冲区中压缩两个文本块”? – phils 2012-04-03 02:19:43

回答

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 
+0

这看起来像一个合理的解决方法。谢谢。 – 2012-04-03 14:11:48

1

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

相关问题