Emacs query-replace-regexp默认的反向顺序

时间:2016-09-26 10:28:56

标签: replace emacs

有时我需要将代码中的变量名从foo更改为bar。我是使用query-replace-regexp来做的。然后我会做其他一些事情,我可能会后悔自己的决定,并希望将其从bar更改为foo。如果我执行query-replace-regexp,则默认情况下会显示上次执行的替换(default foo -> bar)。我的问题是,是否有一种快速告诉Emacs的方法我想要默认的相反顺序?否则,人们需要再次输入整个内容。

修改:默认替换是最后一次替换(default foo -> bar)。我现在想要的是相反的:barfoo。基本上,我想撤消替换。我并不总是可以使用撤消功能,因为在经过许多其他编辑后我可能会有很长的历史记录。

2 个答案:

答案 0 :(得分:2)

使用query-replace时,M-p会检索默认值foo -> bar。也就是说,它将foo -> bar放入迷你缓冲区。

您可以在迷你缓冲区中编辑该文本。特别是,您可以使用M-b(或C-M-b)向后移动单词(或性别),然后使用M-t(或C-M-t)转置这两个单词那里的单词(sexps),给你bar -> foo。 (然后点击RET。)

关键是,一旦您检索到以前使用过的输入或默认输入,您就可以在迷你缓冲区中编辑

通常,在Emacs中,M-n检索默认值。在这种情况下,它是M-p((恕我直言)是一种异常)。)

Wrt访问以前输入的输入:您可以通过重复M-p来循环,但您也可以使用M-r直接搜索。如果您要检索的输入不是最近的,那么M-r可能比骑车更快。

答案 1 :(得分:1)

这可能是一种可怕的方法,但你可以创建一个像下面这样的函数并将其绑定到另一个键。它似乎适用于这种特定的情况,但有许多其他事情没有处理(例如前缀参数)。

(defun so-undo-last-query-replace ()
  (interactive)
  (let ((query-replace-defaults (list (cons (cdar query-replace-defaults)
                                            (caar query-replace-defaults)))))
    (call-interactively 'query-replace)))