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 a
nach 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 \1
es 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