2012-04-02 61 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,您只能將宏計數器插入緩衝區。 當你開始擁有巨大的宏時,你最好爲它編寫一個函數。

相關問題