To main content

vim: Zeichen in Anführungszeichen ersetzen

Veröffentlicht von Benjamin Marwell am

Was ich lange nicht hinbekommen habe: Man hat in vim einen Text in Anführungszeichen und möchte den Inhalt löschen. Aber wie trifft man exakt alle Wörter des Strings beziehungsweise der wörtlichen Rede, ohne erst nachzuzählen?

Der Trick ist eigentlich ganz einfach. Man nehme einen Text wie diesen:

print("|Was mir schon immer Probleme bereitet hat, ist das \", ein %s Anführungszeichen" % "einfaches")

Ok, wollte man hier den String ersetzen, wäre Folgendes möglich. Der Cursor ist dabei durch | dargestellt:

  • c13w löscht bis einschließlich dem %, aber nicht das s

  • c14w löscht dann bis zum s einschließlich

  • c15w löscht den gewünschten Bereich

Blöd ist dabei, dass man sich schnell am %s vertut. Aber vim wäre nicht vim, wenn es nicht etwas dafür bereithalten würde. Der gesuchte Befehl heißt:

c2t"

Kurze Erklärung

Die Bestandteile des Befehls lassen sich gut einzeln lesen:

TeilBedeutung

c<bewegung>

Startet einen Ersetzen-Befehl.

t<zeichen>

Steht sinngemäß für »until«, also bis direkt vor das angegebene Zeichen.

2t

Springt bis zum zweiten Auftreten des folgenden Zeichens.

"

Das gesuchte Zeichen sind hier die Anführungszeichen.

In Umgangssprache wäre das dann: »Ersetze den Text bis zum zweiten Auftreten des Zeichens "«.

Ähnliche Operationen

Register nutzen

Möchte man den ausgeschnittenen Text wieder einfügen, drückt man einfach p für Paste. Soll dieser zuvor in ein Register gespeichert werden, nutzt man etwa den Befehl "xc2t", um den entfernten Text in Register x zu speichern. Mit "xp fügt man ihn anschließend wieder ein.

Umgebende Zeichen

Möchte man die umgebenden Zeichen, hier also die Anführungszeichen, gleich mit ersetzen, empfehle ich das Plugin »surround.vim«.