2016-09-26 3 views
1

Manchmal muss ich einen Variablennamen im Code von foo zu bar ändern. Ich mache es mit query-replace-regexp. Dann würde ich einige andere Sachen machen und ich könnte meine Entscheidung bereuen und sie von bar zu foo zurück ändern wollen. Wenn ich query-replace-regexp mache, wird standardmäßig der letzte durchgeführte Austausch angezeigt (default foo -> bar). Meine Frage ist, gibt es eine schnelle Möglichkeit, Emacs zu sagen, ich möchte die umgekehrte Reihenfolge der Standard? Sonst müsste man das Ganze nochmal tippen.Emacs Abfrage-ersetzen-regexp umgekehrte Reihenfolge der Standardeinstellung

Bearbeiten: Der Standardersatz ist der letzte Ersatz (default foo -> bar). Was ich jetzt will ist das Gegenteil: bar zu foo. Grundsätzlich möchte ich den Ersatz rückgängig machen. Nicht immer kann ich die Rückgängig-Funktion verwenden, da ich nach vielen anderen Bearbeitungen eine sehr lange Geschichte habe.

+0

Sie sollten die Funktion "Refactor Variablenname" in Ihrem Sprachmodus verwenden, um dies zu tun. –

+2

Sie müssen nicht "das ganze Ding wieder tippen". Verwenden Sie den Befehlsverlauf, um die beiden vorherigen Optionen einzeln nacheinander auszuwählen. – phils

+1

Dies ist wahrscheinlich auch weniger sinnvoll für 'query-replace-regexp' als für das einfache alte' query-replace', da Ihre Abfrage- und Ersetzungszeichenfolgen Capture-Gruppen und Backrefs im Prior haben können, die keinen Sinn ergeben . –

Antwort

1

Dies ist wahrscheinlich eine schreckliche Art, dies zu tun, aber Sie könnten eine Funktion wie die folgende erstellen und sie an einen anderen Schlüssel binden. Es scheint in diesem speziellen Fall zu funktionieren, aber es gibt Tonnen anderer Dinge, die nicht so gehandhabt werden (wie das Präfix-Argument).

(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))) 
1

Wenn Sie query-replace verwenden, ruft M-p den Standard, das foo -> bar ist. Das heißt, es setzt foo -> bar in den Minipuffer.

Sie können diesen Text im Minipuffer bearbeiten. Insbesondere können Sie ein Wort (oder ein sexp) mit M-b (oder C-M-b) rückwärts bewegen und dann M-t (oder C-M-t) verwenden, um die beiden Wörter (sexps) dorthin zu transponieren, so dass Sie bar -> foo erhalten. (Dann traf RET.)

Der Punkt ist, dass, sobald Sie einen zuvor verwendeten Eingang abgerufen haben, oder die Standardeingabe, können Sie bearbeiten sie in dem Minipuffer.

(Normalerweise, in Emacs ist es M-n dass der Standardwert abruft. In diesem Fall ist es M-p (die (IMHO) ist eine Aberration).)


Wrt Zugriff auf zuvor eingegebenen Eingangs : Sie können den Zyklus wiederholen, indem Sie M-p wiederholen, aber Sie können auch direkt suchen, indem Sie M-r verwenden. Wenn die Eingabe, die Sie abrufen möchten, nicht sehr aktuell war, kann M-r schneller als das Radfahren sein.

Verwandte Themen