创建一个Emacs半交互式宏

时间:2015-02-05 16:29:38

标签: emacs elisp emacs23

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

使用场景是:

你有一个复杂的文本来改变正则表达式查询替换不会削减它的位置,并且你想要创建一个宏:

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

    M-x eval-expression
    

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

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

    可以这样做吗?

    感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

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