我正在使用 emacs 开发一个项目,我想在其中使用每次迭代都略有变化的键盘宏。当我看到 keyboard macro counter在手册中,这看起来正是我所需要的——但据我所知,它将一个递增的数字插入到当前缓冲区中。我想使用一个递增的数字作为另一个命令的前缀。
例如,我希望能够执行 C-u 3 M-x,而不是在第三次执行宏时将 3
插入缓冲区my-command,然后在下一次迭代时 C-u 4 M-x my-command。
有没有办法创建一个执行此操作的键盘宏?我的具体任务是将同一缓冲区中的两个文本 block “压缩”在一起,但即使有其他方法可以完成该特定任务,也最好知道一般问题的答案。
回应@phils 的评论:
我正在尝试做的一个例子是转向
<<<<< mine
foo
bar
wimble
gleet
=====
gimble
gyre
wade
foobarbaz
>>>>> r345
进入
<<<<< mine
foo
gimble
bar
gyre
wimble
wade
gleet
foobarbaz
=====
>>>>> r345
不过,我更感兴趣的是“有这方面的设施吗?”而不是“我该如何解决这个具体问题”?
最佳答案
因此,通过实验(尽管是短暂的;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
关于emacs - 我可以使用 emacs 键盘宏计数器作为命令前缀吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9985194/