18.7Suchen und Ersetzen
Am schnellsten finden Sie Text mit (Strg)+(S) suchtext. Das Kommando weist gegenüber den Suchkommandos anderer Programme eine Besonderheit auf: Es beginnt die Suche sofort nach der Eingabe des ersten Zeichens. Wenn Sie also »Nebenmodus« suchen und (Strg)+(S) Neb eingeben, dann springt der Cursor bereits zum ersten Wort, das mit »Neb« beginnt. Anstatt die weiteren Buchstaben einzugeben, können Sie jetzt durch das abermalige Drücken von (Strg)+(S) zum nächsten Wort springen, das auch mit »Neb« beginnt. (Wenn Sie nur Kleinbuchstaben eingeben, wird nicht zwischen Groß- und Kleinschreibung unterschieden.)
Wenn Sie jetzt auf die Idee kommen, dass Sie eigentlich nach »Neuigkeit« suchen, löschen Sie das »b« mit (_í). Der Emacs springt zum ersten Wort zurück (ausgehend von der Position beim Beginn der Suche), das mit »Ne« beginnt. Mit der Eingabe von (U) springt Emacs weiter zum ersten Wort, das mit »Neu« beginnt. Probieren Sie es einfach einmal aus – Sie werden von diesem Konzept sofort begeistert sein!
Sobald Sie (¢) oder eine Cursortaste drücken, nimmt das Programm an, dass die Suche beendet ist, und setzt den Cursor an die gefundene Stelle. Der Beginn der Suche wird dabei durch einen Markierungspunkt gespeichert. Daher können Sie mit (Strg)+(X), (Strg)+(X) den Cursor mühelos wieder dorthin zurückstellen, wo er zu Beginn der Suche stand. Ein abermaliges (Strg)+(X), (Strg)+(X) führt Sie wieder an die Stelle des Suchtextes.
Durch zweimaliges Drücken von (Strg)+(S) können Sie die Suche wieder aufnehmen und zum nächsten Auftreten des Suchtextes springen. Wenn Sie rückwärts suchen möchten, drücken Sie einfach (Strg)+(R) statt (Strg)+(S).
Tastenkürzel |
Funktion |
---|---|
(Strg)+(S) |
inkrementelle Suche vorwärts |
(Strg)+(R) |
inkrementelle Suche rückwärts |
(Alt)+(P) |
wählt einen früher verwendeten Suchtext aus (Previous). |
(Alt)+(N) |
wählt einen später verwendeten Suchtext aus (Next). |
(Strg)+(G) |
Abbruch der Suche |
(Strg)+(X), (Strg)+(X) |
vertauscht den Markierungspunkt (Beginn der Suche) und die aktuelle Cursorposition. |
(Strg)+(Alt)+(S) |
inkrementelle Mustersuche vorwärts |
(Strg)+(Alt)+(R) |
inkrementelle Mustersuche rückwärts |
(Alt)+(%) |
Suchen und Ersetzen ohne Muster |
(Alt)+(X) query-replace-r (¢) |
Suchen und Ersetzen mit Muster |
Tabelle 18.14Kommandos zum Suchen und Ersetzen
Wenn Sie zu einem späteren Zeitpunkt nach einem Text suchen möchten, den Sie früher schon einmal gesucht haben, können Sie nach (Strg)+(S) mit (Alt)+(P) (Previous) und (Alt)+(N) (Next) einen Text aus der gespeicherten Liste der Suchtexte auswählen.
Suche nach Mustern (mit regulären Ausdrücken)
Die inkrementelle Suche findet Texte, die exakt dem Suchtext entsprechen. Häufig ist es aber wünschenswert, nach Texten zu suchen, die einem bestimmten Muster entsprechen. Eine derartige Suche starten Sie mit (Strg)+(Alt)+(S) bzw. +(R).
Im Suchtext wird zwischen Groß- und Kleinschreibung unterschieden. Zur Syntax der Musterzeichenkette (siehe Tabelle 18.15) folgen jetzt noch einige erklärende Beispiele:
-
\<[Dd]ie\> sucht nach dem Artikel »die«, egal ob er klein- oder großgeschrieben ist. Wortzusammensetzungen mit »die« (also etwa »dieser«) werden ignoriert.
-
[Dd]ie[a-z]+ sucht nach Wortzusammensetzungen, die mit »Die« oder »die« beginnen und denen mindestens ein weiterer Buchstabe folgt. Der Cursor bleibt jeweils am Ende des Wortes stehen (beim ersten Zeichen, das kein Buchstabe zwischen a und z ist).
-
[Dd]ie[a-zäöüß]+ funktioniert wie oben beschrieben, findet aber auch Wortzusammensetzungen, die deutsche Sonderzeichen enthalten.
Die Zeichenpaare \( und \) haben keinen Einfluss auf die eigentliche Suche. Die Zeichen im gesuchten Text, die den in der Gruppe enthaltenen Zeichen entsprechen, können dann aber zum Bilden des Ersetzen-Textes wiederverwendet werden (siehe unten).
Suchmuster |
Funktion |
---|---|
\< |
Anfang eines Wortes |
& |
Ende eines Wortes |
^ |
Anfang der Zeile |
$ |
Ende der Zeile |
. |
ein beliebiges Zeichen mit Ausnahme eines Zeilenumbruchs |
.* |
beliebig viele (auch 0) beliebige Zeichen (wie * in Dateinamen) |
.+ |
beliebig viele (aber mindestens ein) beliebige(s) Zeichen |
.? |
kein oder ein beliebiges Zeichen |
[abc..] |
eines der aufgezählten Zeichen |
[^abc..] |
keines der aufgezählten Zeichen |
\( |
Beginn einer Gruppe (siehe unten »Suchen und Ersetzen«) |
\) |
Ende einer Gruppe |
\x |
Sonderzeichen x (z.B. \\ zur Suche nach einem \-Zeichen oder \. zur Suche nach einem Punkt) |
\& |
Platzhalter im Ersetzen-Muster für den gesamten gefundenen Text |
\1 |
Platzhalter im Ersetzen-Muster für die erste \(...\)-Gruppe im Suchtext () |
Tabelle 18.15Aufbau eines regulären Suchmusters
Suchen und Ersetzen
Auch beim Suchen und Ersetzen unterscheidet der Emacs zwischen dem normalen Kommando und der erweiterten Version mit Mustersuche. Bei der normalen Variante mit (Alt)+(%) wird die Groß- und Kleinschreibung bei der Suche ignoriert. Beim Ersetzen (siehe Tabelle 18.16) bleiben die Anfangsbuchstaben von Wörtern so erhalten, wie sie bisher waren, wenn der Ersetzen-Text vollständig kleingeschrieben ist. Das Suchen- und Ersetzen-Kommando kann nicht für mehrzeilige Texte verwendet werden, weil die Joker-Zeichen * und + nicht über eine Zeile hinaus wirksam sind.
Das Suchen und Ersetzen mit Mustern starten Sie mit (Alt)+(X) query-replace-r (¢). In der Ersetzen-Zeichenkette können Sie mit \& und \n Platzhalter angeben, die dem ganzen Suchmuster bzw. einem Teil davon entsprechen (siehe Tabelle 18.15). Damit lassen sich sehr komplexe Operationen effizient durchführen. Zur Veranschaulichung ein Beispiel:
Sie ersetzen funktion(\([^,]*\),\([^,]*\)) durch funktion(\2,\1): Bei jedem Aufruf von funktion werden die beiden Parameter vertauscht. Aus funktion(a+b,2*e) wird daher funktion(2*e,a+b). Einzige Bedingung: In den Parametern der Funktion dürfen keine Kommata auftreten. Beim Vertauschen der Parameter in funktion(f(a,b), g(x,y)) versagt das Kommando.
Verwenden Sie das Kommando zum Suchen und Ersetzen mit Mustern zunächst mit Vorsicht, und speichern Sie zuvor Ihren Text. Gerade bei den ersten Versuchen kommt es häufig vor, dass mit dem Suchmuster ganz andere (oft viel größere) Texte erfasst werden, als Sie geplant haben. (Strg)+(X), (Strg)+(U) macht fehlerhafte Ersetzen-Kommandos bei Bedarf wieder rückgängig.
Tastenkürzel |
Funktion |
---|---|
Leertaste oder (Y) |
ersetzen, Suche fortsetzen |
(,) |
ersetzen, aber Cursor stehen lassen, damit das Ergebnis kontrolliert werden kann. Wenn alles in Ordnung ist, kann das Kommando mit Leertaste fortgesetzt werden. |
(_í) oder (N) |
nicht ersetzen, Suche fortsetzen |
(Esc) |
nicht ersetzen, Kommando abbrechen |
(!) |
alle weiteren Ersetzungen ohne Rückfrage durchführen |
(Strg)+(R) |
Kommando vorläufig unterbrechen, um an der aktuellen Cursor- position eine manuelle Korrektur vorzunehmen (Recursive Edit) |
(Strg)+(Alt)+(R) |
Ersetzen-Kommando wieder aufnehmen |
Tabelle 18.16Tastenkürzel zur Bearbeitung des gefundenen Texts