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

标签 emacs elisp

我正在使用 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/

相关文章:

unix - 如何让 emacsclient 找到执行它的 emacs 守护进程

search - Emacs 组织模式 : How to find all TODOs that don't have a deadline specified

emacs - 阻止 Emacs 中的键盘输入

emacs - 使用 key 作为前缀和命令

emacs - 为什么我不应该使用push-mark

emacs - 在 Emacs 中使用 `cider-jack-in` 执行 Clojure

html - 自定义 `org-publish-project-alist`

emacs - 通过 Emacs 在代码注释中插入图片

emacs - 如何嵌套各种 `propertize` s?

emacs - 在循环中生成唯一的随机数