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!