Vim – Suchen & Ersetzen – RegEx

Reguläre Ausdrücke (RegEx) sind DER Shit, wenn es darum geht extrem schnelle und auch sehr komplexe Dinge mit Texten bzw Strings oder einfach generell bei Suchen zu veranstalten.

Ein Anwendungsfall kommt immer wieder vor, nämlich das Suchen&Ersetzen.

Das Muster sieht so aus

:[range] s / [pattern] / [string] / [flags] [count]

[range]

  • bei range steht meist ein Prozentzeichen % das für den gesamten Text aka alles steht
  • hier können auch 1,$ = erste Zeile, erstes Zeichen bis letzte Zeile, letztes Zeichen
  • .,$ heisst von der aktuellen Zeile bis zum Ende
  • {Nummer} – in Zeile Nummer sowieso z.B. Zeile 14
  • Die Übersicht der schier unendlichen Bereichsangaben bekommst du, wenn du vim aufrufst und dann :h range eingibst

s (substitute)

  • Substitute ist die Suchen&Ersetzen Funktion. Wichtig zu wissen ist, dass alle Zeichen, die nicht in a-z und A-Z sind, müssen mit einem vorangestelltem Backslash \ „escaped“ werden.
  • Also Zahlen, Punkte, Klammern und Sonderzeichen mit einem Backslash \ escaped werden.
  • Ein Backslash wird dann natürlich auch mit einem Backslash escaped \\. Und ein Slash im Suchstring wird natürlich auch mit einem Backslash escaped \/ . Auch ein Leerzeichen bzw Blank wird mit einem Backslash escaped.
  • Der Grund dafür ist, dass viele dieser Zeichen selbst eine Funktion für die Suche darstellen. Und damit da keine Verwechselung entsteht muss extra „escaped“ werden.

[pattern]

  • Pattern ist der zu suchende Text
  • In einem Pattern können auch wiederum Pattern-Funktionen eingefügt werden, wie z.B. ab dem 5. Zeichen (spalte/column) %5c oder bis zum 5. Zeichen %>5c und viele weitere.
  • in vim :help pattern

[string]

  • String ist der Text, der das gesuchte Pattern ersetzt werden soll.

[flags]

  • g (global) wiederholt das Suchen&Ersetzen, bis zum Ende des Textes. Wird g nicht angegeben, wird nach dem ersten Suchtreffer aufgehört.
  • c (confirm) zum Bestätigen des Ersetzens
  • i (ignore) um Groß/Kleinschreibung zu ignorieren

[count]

  • der Parameter count wird bei Bedarf in einer positiven ganzen Zahl wie z.B. 5 angegeben. Er wirkt sich auf das Suchen&Ersetzen so aus, dass z.B.
  • %s/blah/blubb/g 5 – vom Textanfang die ersten 5 Zeilen bearbeitet werden
  • 10,$ s/blah/blubb/g 5 – ab Zeile 10, die Zeilen 10, 11, 12, 13, 14, also insgesamt 5 Zeilen bearbeitet werden.

Slash / – das Slash „/“ trennt die verschiedenen Parameter voneinander.

Will ich also den merkwürdigen String „Maier/(Schmidt)-Hans\Jens.Familie?“ in meinem gesamten Text mit „Bullshit!„ersetzen, sähe der Aufruf so aus

:%s/Maier\/\(Schmidt\)\-Hans\\Jens\.Familie\?/Bullshit\\!/g

Einfach vor jedes nicht a-zA-Z Zeichen ein Backslash