创建 Emacs 半交互式宏

Create an Emacs semi-interactive macro

我想创建一个快速的 Emacs 宏(使用 C-x (),它在每次执行时从迷你缓冲区获取一些用户输入。

使用场景是这样的:

您有一个复杂的文本需要更改,但正则表达式查询替换无法解决这个问题,您想要创建一个宏:

  1. 对当前文本行进行一些复杂的更改
  2. 将光标定位在特定点
  3. 向用户询问迷你缓冲区中的一些文本
  4. 可能执行一些其他操作,然后退出

我试过使用

M-x eval-expression

(insert-text (read-from-minibuffer ">"))

但是在创建之后,宏显然(回想起来......:))重复相同的击键,因此没有给我插入一些新文本的机会。

这可以做到吗?

感谢您的帮助!

使用kbd-macro-query,通常绑定到C-x q。具体来说,您应该使用 C-u C-x q,它会在您定义查询时进入递归编辑模式,并允许您在迷你缓冲区提示中输入您喜欢的任何文本,但请注意,您在此处输入的文本不会成为键盘宏。在定义宏时,您需要按一次 <enter> 来结束递归编辑,然后再按一次以将文本发送到迷你缓冲区提示符,以便您可以继续定义宏。完成宏定义后,您就可以执行它,它将在您调用 kbd-macro-query 的位置停止,提示输入文本,然后按 <enter> 将按预期工作。