创建 Emacs 半交互式宏
Create an Emacs semi-interactive macro
我想创建一个快速的 Emacs 宏(使用 C-x (
),它在每次执行时从迷你缓冲区获取一些用户输入。
使用场景是这样的:
您有一个复杂的文本需要更改,但正则表达式查询替换无法解决这个问题,您想要创建一个宏:
- 对当前文本行进行一些复杂的更改
- 将光标定位在特定点
- 向用户询问迷你缓冲区中的一些文本
- 可能执行一些其他操作,然后退出
我试过使用
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>
将按预期工作。
我想创建一个快速的 Emacs 宏(使用 C-x (
),它在每次执行时从迷你缓冲区获取一些用户输入。
使用场景是这样的:
您有一个复杂的文本需要更改,但正则表达式查询替换无法解决这个问题,您想要创建一个宏:
- 对当前文本行进行一些复杂的更改
- 将光标定位在特定点
- 向用户询问迷你缓冲区中的一些文本
- 可能执行一些其他操作,然后退出
我试过使用
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>
将按预期工作。