Ich habe eine ziemlich große Textdatei aus Blöcken wie
Short line.
Really long line.
Short line.
durch leere Zeilen getrennt, und ich möchte vim (unter Linux) verwenden, um die langen Zeilen aufzubrechen und Blöcke wie zu erhalten
Short line.
This was
part of
a long line.
Short line.
Mein Problem mit gq
(und gw
) ist, dass jeder Block als ganzer Absatz neu ausgeführt wird, dh die beiden Zeilenumbrüche in jedem Block werden nicht beibehalten, und gemäß :help fo-table
keiner der Formatoptionen kann gq
ich tun, was ich will. Ich dachte auch, dass ich mein Ziel erreichen könnte, wenn ich neue Zeilenzeichen als Absatzbegrenzer definieren könnte, aber entsprechend :help paragraph
sind sie hartcodiert.
Bearbeiten: Ich weiß, dass ich jede lange Zeile einzeln verwenden gq
oder gw
formatieren kann, aber da meine Datei einige tausend Zeilen umfasst, suche ich nach einer Möglichkeit, dies automatisch zu erreichen.
gq
und Bescheid wusstegw
. Ich bin auch froh, dass ich hier nicht aufgehört habe, sonst hätte ich nichts über den:g
Befehl erfahren . :)Antworten:
Dies wendet den
normal
Befehlgww
(der die aktuelle Zeile wie mit formatiertgw
) auf den gesamten Puffer an, ohne benutzerdefinierte Zuordnungen zu berücksichtigen (um Probleme zu vermeiden, wenn z. B.gw
etwas anderem zugeordnet wurde).Sehen
:help :%
:help :norm
:help gww
Diese Alternative entspricht dem Vorschlag von Ben in den Kommentaren und ist einfacher als die ursprüngliche Lösung, die unten gespeichert wird, da sie aufgrund der Fähigkeit zum Abgleichen regulärer Ausdrücke unter anderen ähnlichen Umständen möglicherweise besser passt. Im Fall "Alle Zeilen abgleichen" ist dies jedoch unnötig brutal.
Die Anwendung
gww
auf jeder einzelnen Zeile im Puffer programmatisch:Siehe
:help :g
und:help norm
.^
Entspricht dem Zeilenanfang, wodurch diese in der Praxis mit jeder Zeile übereinstimmt .Man kann sich auch dafür entscheiden, nur Zeilen auszuwählen, die länger als zB 60 Zeichen sind
(siehe
:help \%<
), aber in der Praxisgww
werden Zeilen nur länger alstextwidth
ohnehin neu formatiert , sodass es weder für die Geschwindigkeit noch für das Ergebnis von Bedeutung ist.(Ich verwende
v
für "virtuelle Spalte" anstelle vonc
"Spalte", da letztere tatsächlich eine bestimmte Anzahl von Bytes in der Zeile berechnet. Dies kann zu unerwarteten Ergebnissen führen, wenn Multibyte-Codierungen verwendet werden, was häufig ein Grund zur Vorsicht ist. In der Praxis ist es aus dem gleichen Grund wie oben kein echtes Problem,gww
da dies nicht dazu führt , dass Zeilen kürzer alstextwidth
ohnehin neu formatiert werden.)quelle
:g
ohne Muster,:g//norm gww
funktioniert also nicht, funktioniert aber:g/.*/norm gww
.:g//
verwendet das letzte Suchmuster wieder; Wenn es keine gibt, schlägt es fehl. Verwenden Sie:g/^/
diese Option , um auf alle Zeilen anzuwenden .:help last-pattern
für die normale Suche angegebenen Informationen auch für den:global
Befehl gelten.Da Sie bereits das Handbuch für die gelesen haben
gq
undgw
Befehle, ich meine , haben Sie wahrscheinlich etwas bequemer wollen als manuell auf die langen Linien zu bewegen und dann mitgw0
,gw$
oder ein anderergw
Befehl nur die aktuelle Zeile formatiert werden .Ich kenne keine einfache Möglichkeit, lange Zeilen in Vim über einen Textblock zu brechen. Da Sie jedoch erwähnt haben, dass Sie Vim auf einem GNU / Linux-System verwenden, würde ich vorschlagen, Ihren Text über den
fmt
Befehl GNU zu filtern .Für die gesamte Datei:
Für den aktuellen Absatz (mit kurzen Optionen):
Erläuterungen zu den relevanten
fmt
Optionen sind:-w, --width=WIDTH
- maximale Zeilenbreite (Standard 75 Spalten). Die Option-WIDTH
ist eine abgekürzte Form von--width=DIGITS
(wenn Sie diese abgekürzte Version verwenden, muss es die erste Option sein).-s, --split-only
- lange Schlangen teilen, aber nicht nachfüllen; Dies ist die Option, mit der Ihre bereits vorhandenen Zeilenumbrüche beibehalten werden.quelle
fmt
. Ich habe es jedoch vorgezogen, die andere Antwort zu akzeptieren, da sie nur vim erfordert.Von:
Setzen Sie den Marker auf die Linie "lorem ipsum" und drücken Sie die
gww
Ausbeuten (textwidth=40
zur Verdeutlichung):was mir wie das erscheint, wonach du fragst. Wenn nicht, können Sie dies gerne klären.
quelle