Ich versuche häufig, zB foo
durch bar
und bar
mit foo
in einem Puffer zu ersetzen .
Die Art, wie ich es normalerweise mache, ist entweder:
- 3 abfrage ersetzt:
aaa -> @@@
,bbb -> aaa
,@@@ -> bbb
- Geben Sie die Automatisierung auf und tauschen Sie sie einfach von Hand aus
Ich nehme an, dass es möglich ist, mithilfe der ,
Syntax in etwas zum Funktionieren zu bringen, um query-replace-regexp
zu testen, ob die übereinstimmende Zeichenfolge aaa
oder ist bbb
. Aber die resultierende Syntax wäre zu umständlich, so dass ich es nie wirklich ausprobiert habe.
Angesichts der Tatsache, wie häufig eine Aufgabe ist, muss es meiner Meinung nach eine bessere, einstufige Methode geben, die entweder integriert oder in ein vorhandenes Paket integriert ist. Gibt es?
replace
refactoring
T. Verron
quelle
quelle
query-replace
weiß ich, dass es normalerweise schneller geht,M-% str1 str2
als den Punkt zu verschieben und die Änderung von Hand vorzunehmen . Es ist schön, weil ich keine Zeit damit verschwenden muss, darüber nachzudenken, was am schnellsten sein wird, auch wenn es nur ein einziges Mal vorkommtstr1
. Idealerweise möchte ich, dass die Textumkehrung genauso schnell erfolgt, damit ich sie verwenden kann, ohne auch darüber nachzudenken.(setq a (prog1 b (setq b a)))
. Und vielleicht gibt es sogar einen einfacheren Weg.\,(if \1 "b" "a")
besonders hässlich (gegen einen Regexp von\(a\)\|b
), aber trotzdem müssen die Wörter zweimal getippt werden, wenn dich das stört.\(aaa\)\|bbb
?Antworten:
Hier ist ein kleiner Befehl, der dies erledigt:
quelle
query-replace
für die Inversion, so dass es alle seine Funktionen beibehält? Es entspricht nicht 100% der Definition in meinem Emacs, aber ich bin immer noch mit 24,5 ...query-replace
der Funktionsfamilie der neuesten Version, daher bleiben alle Funktionen erhalten. Am Ende der Funktion habe ich meine empfohlene Methode zum Austauschen von Strings hinzugefügt, die im Emacs-Handbuch erwähnt wird.backward
undregion-noncontiguous-p
vom aufruf bisperform-replace
. Handelt es sich um ein allgemeines Problem, oder hat sich die Benutzeroberflächeperform-replace
zwischen den Versionen geändert?Installieren Sie plur
und führen Sie den Befehl aus
plur-query-replace
und Eingabe
{foo,bar}
und deren Ersatz{bar,foo}
Klicken Sie
y
auf, um die gewünschten Vorkommen zu ersetzen.Es gibt auch nicht interaktive und suchähnliche Varianten dieses Befehls.
quelle
;)
plur
erfordertemacs 24.4
.