3 Stimmen

Wie sortiert man einen Textblock?

Ich habe einen Text von 50000 Zeilen

vor der Änderung

bird={
erkläre Zeile1
erkläre Zeile2
...
}
zero={
erkläre Zeile1
erkläre Zeile2
...
}
bed={
erkläre Zeile1
erkläre Zeile2
...
}
air={
erkläre Zeile1
erkläre Zeile2
...
}
.......

den ich gerne ändern möchte in

air={
erkläre Zeile1
erkläre Zeile2
...
}
bed={
erkläre Zeile1
erkläre Zeile2
...
}
bird={
erkläre Zeile1
erkläre Zeile2
...
}
zero={
erkläre Zeile1
erkläre Zeile2
...
}

Meine Lösung ist in vier Schritte unterteilt:

1.g/{/;/}/s/$/@ (@ ist nicht in der Datei enthalten)

2.g/{/;/}/j!

3.sort

4.%S/@/\r/g

Gibt es eine bessere Lösung? Ein Schritt?

2voto

Ingo Karkat Punkte 159961

Vim hat keine eingebaute Vorstellung davon, "diese Blöcke als einzelne Einheiten zu behandeln", wenn sie sortiert werden; auch das Falten hilft nicht. Der von Ihnen skizzierte Ansatz (erst alle Zeilen jedes Blocks zu einer einzigen langen Zeile verbinden, dann sortieren, dann trennen) ist der kanonische Workaround.

Natürlich können Sie, wenn Sie dies häufiger benötigen, ein benutzerdefiniertes :Befehl dafür definieren. Für ein Beispiel (das mit Faltung funktioniert) siehe dies.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X