Wie formatiere ich eine Quelldatei, um von 2 Leerzeichen zu 3 zu gelangen?

8

Diese Frage ist fast identisch mit diese Frage außer, dass ich zu drei Räumen gehen muss (Firmencodierungsrichtlinien), anstatt vier und die akzeptierte Lösung wird nur das übereinstimmende Muster verdoppeln. Hier war mein erster Versuch:

%Vor%

Aber das funktioniert nicht, weil vier Räume durch drei ersetzt werden. Also ich denke, dass was ich brauche ist eine Möglichkeit, die Anzahl der Male zu erhalten, die das Muster "+" übereinstimmte und diese Zahl verwendet, um die andere Seite der Substitution zu erstellen, aber ich denke, dass diese Funktionalität in Vim Regex wahrscheinlich nicht verfügbar ist Ich weiß, wenn Sie denken, dass es möglich ist).

Ich habe auch versucht, die Ersetzung manuell zu machen, indem ich zuerst die größten Einzüge und dann die nächsten kleineren Einzüge ersetzt habe, bis ich alles konvertiert habe, aber das war schwierig, die Abstände zu verfolgen:

%Vor%

Ich könnte es über Perl senden, da es scheint, als hätte Perl die Möglichkeit, es mit seinen erweiterten Mustern . Aber ich konnte es nicht mit meiner Version von Perl arbeiten. Hier war mein Versuch mit dem Versuch, a's zu zählen:

%Vor%

Mein letzter Ausweg wird sein, ein Perl-Skript zu schreiben, um die Konvertierung durchzuführen, aber ich habe auf eine allgemeinere Lösung in Vim gehofft, damit ich die Idee wieder verwenden könnte, um andere Probleme in der Zukunft zu lösen.

    
stephenmm 21.06.2011, 16:12
quelle

2 Antworten

7

Lass es vim für dich tun?

%Vor%

Der erste Befehl legt die Option shiftwidth fest, um wie viel Sie einrücken möchten. In der zweiten Zeile steht: Gehe zum Anfang der Datei ( gg ) und reindent ( = ) bis zum Ende der Datei ( G ).

Das hängt natürlich davon ab, ob vim einen guten Formatierer für die von Ihnen verwendete Sprache hat. Etwas könnte durcheinander kommen, wenn nicht.

Regexp Weg ... Sicherer, aber weniger verständlich:

%Vor%

(Ich musste etwas experimentieren.)

Zwei Punkte:

  • Wenn die Ersetzung mit \= beginnt, wird sie als Ausdruck ausgewertet.
  • Sie können viele Dinge anstelle von / verwenden, daher ist / für die Teilung verfügbar.
Amadan 21.06.2011, 16:14
quelle
1

Die Perl-Version, nach der Sie gefragt haben ...

Von der Befehlszeile (bearbeitet direkt, keine Sicherung):

%Vor%

(in-place, Original gesichert auf "YOUR_FILE.bak"):

%Vor%

Von vim während der Bearbeitung von YOUR_FILE:

%Vor%

Die Regex stimmt mit dem Anfang der Zeile überein, gefolgt von (der erfassten Gruppe von) einer oder mehreren "zwei Leerzeichen" -Gruppen. Das Substitutionsmuster ist ein Perl-Ausdruck (daher der Modifikator "e"), der die Anzahl der erfassten "zwei Raum" -Gruppen zählt und eine Zeichenkette derselben Anzahl von "drei Raum" -Gruppen erzeugt. Wenn ein "Extra" -Raum im Original vorhanden war, wird es nach der Substitution beibehalten. Wenn Sie also vorher drei Felder hatten, werden Sie vier nachher haben, fünf davor werden Sie nach sieben usw. usw.

    
Brian Gerard 21.06.2011 19:29
quelle

Tags und Links