Vim Suchen und Ersetzen - Regex

Vim Suchen und Ersetzen - Regex

Ich möchte eine Suche und Ersetzung durchführen. Ein Zeilenumbruch vor jeder Nicht-Ziffer sollte durch einen Tabulator ersetzt werden. Ich habe versucht

%s/\n\D/\t/g

aber es ersetzte das erste Zeichen des Wortes nach dem Zeilenumbruch, was nicht das ist, was ich wollte, d.h.

abcd
abcd

Zu

abcd   bcd

Ich möchte es anach dem Zeilenumbruch beibehalten.

Antwort1

Sie sind fast am Ziel, aber Ihr regulärer Ausdruck ersetzt sowohl den ZeilenumbruchUnddie Nicht-Ziffer mit einem Tabulator.

Wie wäre es, jede neue Zeile, auf die eine Nicht-Ziffer folgt, durch einen Tabulator zu ersetzen?und dieselbe Nicht-Ziffer?

%s/\n\(\D\)/\t\1/g

Das Escapen ist ein bisschen chaotisch, aber im Grunde haben Sie eine Gruppierung um das \D, die alles erfasst, was nicht ziffernhaft ist. Darauf wird dann mit verwiesen, um \1es nach dem Tabulator einzufügen.

Antwort2

Eine Möglichkeit hierfür ist die Verwendung des Endmatch-Markers:

%s/\n\ze\D/\t/

Eine andere Möglichkeit besteht darin, einen negativen Lookahead zu verwenden:

%s/\n\d\@!/\t/

Sie sind nicht genau gleichwertig; das zweite ersetzt auch die letzte neue Zeile in einer Datei.

Antwort3

ich hoffe, dies wird dir helfen

:%s#\n.\D#\t#g

verwandte Informationen