Suchen, Ersetzen und Modifizieren

In diesem Abschnitt werden die folgenden Funktionalitäten von Ed42 behandelt: Suchen im aktuellen Text (Erreichbar über Suchen|Suchen bzw. Strg-F): Der Dialog bietet neben den üblichen Optionen zum Suchen von Texten die Möglichkeit, nach regulären Ausdrücken zu suchen. Der zu suchende Text kann darüber hinaus auch Substrings der Form #NNN enthalten, wobei N eine Ziffer darstellt. Solche Substrings werden (vor der Suche) durch das Zeichen mit ASCII-Code NNN ersetzt. Soll der String das Zeichen '#' enthalten, muß '##' eingegeben werden. Nachdem ein zu suchender Text gefunden wurde, kann die Suche über Suchen|Suche wiederholen bzw. F3 fortgesetzt werden. Der implementierte Mechanismus ist nicht in der Lage zeilenübergreifend zu arbeiten; so kann z.B. nicht explizit nach einem Zeilenende gesucht werden.

Ersetzen im aktuellen Text (Erreichbar über Suchen|Ersetzen bzw. Strg-R): Es gelten die gleichen Ausführungen wie für das Suchen im aktuellen Text.

Dateiübergreifende Suche (Erreichbar über Suchen|Suchen in Dateien bzw. Umsch-Strg-F): Es gelten die gleichen Ausführungen wie für das Suchen im aktuellen Text. Zusätzlich kann spezifiziert werden, ob die Dateien des aktuellen Projekts durchsucht werden sollen, die aktuell geladenen Dateien oder ob ein spezielles Verzeichnis (ggf. mit Unterverzeichnissen) durchsucht werden soll. Wird ein spezielles Verzeichnis durchsucht, können die betroffenen Dateien über eine Dateimaske eingeschränkt werden, die mehrere Dateispezifikationen (getrennt durch Leerzeichen) enthalten kann (also z.B. '*pas *.c'). Zusätzlich kann angegeben werden, ob die (über die Projektoptionen, Registerkarte Pfade konfigurierbaren) Includeverzeichnisse mit in die Suche einbezogen und ob Verzeichnisse rekursiv durchsucht werden sollen. Es ist zu beachten, dass bei dateiübergreifenden Operationen nur Dateien berücksichtigt werden, deren Extensions nicht in der entsprechenden Ausschlußliste der Projektoptionen (Registerkarte Extensions) eingetragen sind.

Das Ergebnis einer dateiübergreifenden Suche wird in einem Ergebnisdialog zusammengefaßt in dem die einzelnen Vorkommen aufgelistet sind. Über einen Doppelklick auf ein Element der Liste kann zu dem entsprechenden Vorkommen gewechselt werden (ggf. wird zuvor der zugehörige Text automatisch geladen).

Über die Projektoptionen (Registerkarte Suchen/Ersetzen) kann eingestellt werden,

  • ob die Suche sich standardmäßig über die Dateien des aktuellen Projekts erstrecken soll.
  • ob die Suche sich standardmäßig über die (im Rahmen der Projektoptionen, Registerkarte Pfade konfigurierbaren) Includeverzeichnisse erstrecken soll. 
  • ob Verzeichnisse standardmäßig rekursiv durchsucht werden.
Dateiübergreifendes Ersetzen (Erreichbar über Suchen|Ersetzen in Dateien bzw. Umsch-Strg-R): Es gelten die gleichen Ausführungen wie für die dateiübergreifende Suche, es sind aber keine regulären Ausdrücke verwendbar (vgl. Ersetzen im aktuellen Text). Das Ergebnis einer dateiübergreifenden Ersetzung wir in einem Ergebnisdialog dargestellt in dem für jede betroffene Datei die Anzahl der Ersetzungen angegeben wird. Soll eine Binärdatei verändert werden, kann das Feature nicht verwendet werden. Stattdessen muß eine Modifikation von Dateien angewendet werden (s.u.).
    Achtung: Dieses Feature von Ed42 ist mit Vorsicht zu genießen, da es keine Möglichkeit gibt, eine dateiübergreifende Ersetzung über die Undo-Funktion rückgängig zu machen (es hilft ggf. nur eine weitere dateiübergreifende Ersetzung).
Suchen von Dateien (Erreichbar über Suchen|Datei suchen): Das Ergebnis der Suche wird in einem Ergebnisdialog angezeigt, in dem die Vorkommen der gesuchten Datei angezeigt werden. Über einen Doppelklick auf einen Eintrag der Liste wird zur entsprechenden Datei gewechselt (die ggf. zuvor automatisch geladen wird).

Suchen von korrespondierenden Klammern (Erreichbar über Suchen|Klammer suchen bzw. Strg-B): Über dieses Feature kann eine Klammer gesucht werden, die zu der Klammer an der aktuellen Cursorposition korrespondiert. Ist eine solche korrespondierende Klammer vorhanden, wechselt der Cursor zu dieser Klammer. Die von diesem Feature zu behandelnden Klammerformen sind sprachabhängig. Vgl. Abschnitt Sprachunterstützung.

Modifikation von Dateien (Erreichbar über Datei|Datei modifizieren): Dieses Feature erlaubt es, in einer (Binär-)Datei eine Zeichenfolge durch eine andere zu ersetzen oder in regelmäßigen Abständen eine Zeichenkette einzufügen. Ein zu suchender/ersetzender/einzufügender String kann Ausdrücke der Form #NNN enthalten (vgl. Suchen im aktuellen Text).

Reguläre Ausdrücke: Zu suchende Zeichenfolgen können auf expliziten Wunsch (vgl. die entsprechenden Optionen in den Menüs zur (dateiübergreifenden) Suche bzw. zum (dateiübergreifenden) Ersetzen reguläre Ausdrücke verwendet werden. Der implementierte Mechanismus ist nicht in der Lage zeilenübergreifend zu arbeiten; so kann z.B. nicht explizit nach einem Zeilenende gesucht werden. Die folgende Tabelle faßt die Syntax für reguläre Ausdrücke zusammen.
 
(Teil-)Ausdruck Bedeutung
. Ein Punkt ist ein Platzhalter für ein beliebiges Zeichen (ausgenommen des Zeilenendes)
* Ein Stern nach einem Teilausdruck findet jede beliebige Anzahl an direkt konkatenierten Vorkommen dieses Teilausdrucks. Zum Beispiel findet bo*  b,  bo und boo.
Suchstrategie: von links nach rechts, maximale Übereinstimmung.
+ Ein Pluszeichen nach einem Teilausdruck findet eine Sequenz die aus einer n-fachen Konkatenation dieses Teilausdrucks besteht, wobei n > 0 gilt.  Zum Beispiel findet bo+  bo und boo, aber nicht b.
Suchstrategie: von links nach rechts, maximale Übereinstimmung
? Findet 0 bzw. 1 Vorkommen eines Teilausdrucks.
Suchstrategie: von links nach rechts, maximale Übereinstimmung
*? Wie *, aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
+? Wie +, aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
?? Wie ?, aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
{n,m} Wie *, es müssen aber mindestens n und maximal m Vorkommen des Teilausdrucks gefunden werden.
{n,} Wie *, es müssen aber mindestens n Vorkommen des Teilausdrucks gefunden werden.
{n} Entspricht {n,n}
{n,m}? Wie {n,m} aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
{n,}? Wie {n,} aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
{n}? Wie {n} aber mit Suchstrategie: von links nach rechts, minimale Übereinstimmung.
| Oder Verknüpfung: x|y findet x oder y.
[] Zeichen in Klammern finden jedes einzelne Zeichen, daß in der Klammer vorkommt, aber keinen anderen. Zum Beispiel findet [bot] b, o oder t.
[^] Ein Circumflex am Anfang einer Zeichenkette in Klammern bedeutet NICHT. Daher findet [^bot] alle Zeichen außer b, o oder t.
[-] Ein Bindestrich in Klammern zeigt einen Bereich von Buchstaben an. Zum Beispiel findet [b-o] jedes Zeichen von b bis o. 
( ) Runde Klammern gruppieren Teilausdrücke. 
\ Ein Rückstrich vor einem Platzhalterzeichen weist den Quelltext-Editor an, Zeichen wörtlich und nicht als Platzhalterzeichen zu verwenden. Zum Beispiel findet \+ das Zeichen '+'.
\d \d ist ein Platzhalter für eine beliebige Ziffer. Entspricht [0-9].
\w \w ist ein Platzhalter für einen beliebigen Buchstaben (ohne Umlaute und ß). Entspricht [a-zA-Z].

Die sonst üblichen Markierungen '^' und '$' zum Suchen am Zeilenanfang bzw. Zeilenende entfallen. Diese Suchoptionen können direkt über die Suchen-/Ersetzendialoge eingestellt werden.

Suchen und Ersetzen mit regulären Ausdrücken: Wird beim Ersetzen in Texten bzw. Dateien für die Suche ein regulärer Ausdruck verwendet, können die Textstücke, die mit '(' und ')' geklammerten Teilausdrücken übereinstimmen, in die ersetzende Zeichenkette integriert werden.

Beispiel: Gesucht wird der reguläre Ausdruck 'a(.*)b'. Alle Textstücke, die mit diesem Ausdruck übereinstimmen, sollen durch ein Textstück der Form 'aXStefanb', wobei X das Textstück bezeichnet, das mit dem Teilausdruck (.*) übereinstimmt. Um das Textstück 'aHallob' durch 'aHalloStefan' zu ersetzen, muß die ersetzende Zeichenkette den Wert 'a\1Stefanb' haben, d.h. '\1' wird durch das Textstück ersetzt, das mit dem Teilausdruck (.*) übereinstimmt.

Generell kann die Zeichenkette, die mit dem i-ten Teilausdruck übereinstimmt, über den Ausdruck '\i' in die ersetzende Zeichenkette integriert werden. Es können nur Teilausdrücke der obersten Ebene berücksichtigt werden, d.h. Teilausdrücke, die in anderen Teilausdrücken enthalten sind, können nicht für sich allein berücksichtigt werden. Soll die ersetzende Zeichenkette das Zeichen '\' enthalten, muß dies über den Ausdruck '\\' geschehen.


Last Change: 27.10.2001
© Copyright by Stefan Brüning. All rights reserved