Ich habe Zeilen wie
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Wenn eine Zeile mit Regex ^a.+g$
übereinstimmt dann möchte ich, dass sie verbunden werden, also wäre es:
abcdefgjoin!
abcdef
no join
abcdefgjoin!
Gibt es eine Möglichkeit, das in VIM
zu tun ?
Akzeptierte Antwort:
Im normalen Modus J
(im Unterschied zu j
, die den Cursor eine Zeile nach unten bewegt) wird verwendet, um eine Zeile mit der direkt darunter liegenden zu verbinden. Standardmäßig fügt es jedoch ein Leerzeichen am Ende der ersten Zeile hinzu; Um das gewünschte Ergebnis zu erhalten (Verbinden der Zeilen ohne Einfügen eines zusätzlichen Leerzeichens), müsste man gJ
verwenden .
Um Normalmodus-Befehle im Ex-Modus zu verwenden (den Sie durch Drücken von :
eingeben im normalen Modus), muss man den normal
verwenden Befehl. Siehe :h normal
innerhalb vim. Um also mit der nächsten Zeile zu arbeiten, die dem Muster entspricht, würde man verwenden (beachten Sie, dass Sie standardmäßig +
maskieren müssen um es mit der Regex von vim zum Laufen zu bringen, eine Folge der Aufrechterhaltung der Kompatibilität mit der alten Regex-Engine des ursprünglichen vi):
:/^a.\+g$/normal gJ
Um an allen zu arbeiten Zeile, die dem Muster entspricht, würde man den :global
verwenden Befehl (siehe :h :g
innerhalb von vim) so:
:global/^a.\+g$/normal gJ
Oder kürzer:
:g/^a.\+g$/norm gJ
Es ist auch möglich, den Ex-Befehl join
zu verwenden (siehe :h :join
), um dasselbe mit etwas weniger Eingabe zu erreichen (der !
am Ende sagt in diesem Fall join
kein Leerzeichen am Ende der ersten Zeile einzufügen).
:g/^a.\+g$/join!