Wie kann man in Emacs bei einer Abfrage-Ersetzung (query replace) ein Newline-Zeichen verwenden?

Melden
  1. Einführung in die Abfrage-Ersetzung in Emacs
  2. Herausforderung bei der Ersetzung von Newline-Zeichen
  3. Wie gibt man ein Newline-Zeichen im Query Replace ein?
  4. Beispiel für die Verwendung von Newline bei query-replace-regexp
  5. Zusammenfassung

Einführung in die Abfrage-Ersetzung in Emacs

Emacs bietet eine mächtige Funktion namens Query Replace, mit der Benutzer Text im aktuellen Puffer interaktiv suchen und ersetzen können. Dabei wird jede einzelne Übereinstimmung angezeigt und der Benutzer wird gefragt, ob er sie ersetzen möchte oder nicht. Dies ist besonders nützlich, um gezielt Änderungen vorzunehmen, ohne alle Vorkommen automatisch zu ersetzen.

Herausforderung bei der Ersetzung von Newline-Zeichen

Ein häufiger Bedarf besteht darin, in Suchen und Ersetzungen auch Zeilenumbrüche (Newline-Zeichen) zu berücksichtigen. Standardmäßig sorgt Emacs beim Query Replace jedoch dafür, dass Zeilenumbrüche als trennende Elemente und nicht als Teil des Such- oder Ersatzstrings interpretiert werden. Das bedeutet, dass man nicht einfach mit C-q C-j (Control+q, Control+j) oder anderen Tastenkombinationen ein Newline-Zeichen im Ersetzungsfeld eingeben kann.

Wie gibt man ein Newline-Zeichen im Query Replace ein?

Um im Ersetzungsstring ein Newline-Zeichen einzufügen, muss man anstelle des normalen Query Replaces das spezielle Kommando query-replace-regexp verwenden. Dies ist die reguläre Ausdrücke-Version der Ersetzung und erlaubt das Verwenden von Escape-Sequenzen.

In dieser Variante gibt man im Ersetzen-Teil den String \n ein, um einen Zeilenumbruch einzufügen. Ein typischer Ablauf sieht so aus:

Man ruft M-% (query-replace) auf, und wenn man einen Newline im Such- oder Ersetzstring benötigt, drückt man stattdessen C-M-%, welches query-replace-regexp startet. Danach gibt man im Suchmuster foo ein, und im Ersetzungsmuster etwa bar\nbaz, wobei \n den Zeilenumbruch darstellt.

Beispiel für die Verwendung von Newline bei query-replace-regexp

Angenommen, man möchte alle Vorkommen von foo im Text durch die zwei Zeilen bar gefolgt von baz ersetzen. Dabei muss man C-M-% drücken, und dann bei der Ersetzung bar\nbaz schreiben. Emacs interpretiert \n korrekt als Zeilenumbruch und ersetzt den gefundenen Ausdruck entsprechend.

Zusammenfassung

Die normale query-replace-Funktion in Emacs unterstützt keine direkten Newline-Zeichen in Such- oder Ersatztexten. Möchte man jedoch beim Ersetzen Newlines verwenden, so ist die Verwendung der regulären Ausdrucks-Variante query-replace-regexp notwendig. Dort kann man \n im Ersetzungsmuster als Newline einfügen. Diese Vorgehensweise stellt sicher, dass Text mit Zeilenumbrüchen gezielt gesucht und ersetzt werden kann.

0

Kommentare