Wie kann ich Text in Vim bis zu einer gewissen Länge umbrechen?


102

Sprechen wir von relativen Maßen. Mein Vim sieht aus wie:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Ich möchte, dass es kleiner ist:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Wie kann ich es bekommen? Und wie kann ich die Länge eines solchen Blocks festlegen?


Meinen Sie Zeilenumbruch und nicht Einrückungstext?
lc.

lc: Ich kenne den Unterschied nicht. Ich wollte Wrap schreiben, wie es mir empfohlen wurde, aber ich habe es nie zum Laufen gebracht.
Léo Léopold Hertz 준영

Antworten:


177

Sie können tatsächlich zwei Dinge tun:

  1. Lassen Sie vim Ihren Text formatieren (dh ändern), um kürzere Zeilen zu erhalten, indem Sie Zeilenumbrüche einfügen
  2. Lassen Sie die Zeilen unverändert, zeigen Sie sie jedoch umbrochen an

Welches möchtest du haben?

Option 1 würde durch Einstellen erreicht textwidth(zum Beispiel :set textwidth=30(aus Swaarops Antwort)). Anschließend können Sie Ihren Text neu formatieren, indem Sie ihn markieren (im visuellen Modus) und eingeben gq. ( textwidthkann daher als abgekürzt twwerden :set tw=30.)

Option 2 kann durch Ausführen von :set wrap/ umgeschaltet werden :set nowrap. Dadurch werden Zeilen umbrochen, die für das Fenster zu lang sind.

Beide sind unabhängig.


33
+1 für den Befehl gq key aus dem visuellen Modus, das ist unglaublich nützlich
Fire Crow

3
Zu Ihrer Information, dies bricht in Leerzeichen und gqgq macht nichts mit einer Linie wie in der Frage gezeigt, selbst wenn tw = 5 ist.
Dlamblin

2
@Dlamblin: Richtig. Wenn Sie mit genau der angegebenen Breite falten möchten, ohne das Leerzeichen zu foldberücksichtigen , verwenden Sie den Befehl wie in der Antwort von fgm.
Sleske

Ihre Option zu funktioniert meines Erachtens nicht. wrapwird an der Fenstergrenze gewickelt, nicht an textwidth.
DerWeh

@DerWeh: Ja, Wrap wird an der Fenstergrenze umbrochen. Ich habe bearbeitet, um zu klären.
Sleske

60

Sobald Sie 'Textbreite' eingestellt haben, können Sie Text im visuellen Modus auswählen und gq drücken, um ihn schön zu verpacken (Sie können Q auch bei einigen älteren / älteren Konfigurationen verwenden).

Einige nützliche Tipps:

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

3
+1, ich habe versehentlich gq getroffen, während ich in vim war, habe die letzte halbe Stunde damit verbracht, zu sehen, was ich getroffen habe. Das ist so nützlich.
user176121

gqqumschließt auch die aktuelle Zeile (anstelle von gqgqoder gq$).
Ash

21

Die Verwendung von Falte (1) ist eine Möglichkeit:

:%!fold -w5 

Ergebnis:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
Dies berücksichtigt auch keine Leerzeichen zum Falten
Lionel

7
@ Lionel: Ja. Fügen Sie dem Befehl fold die Option "-s" hinzu, um Leerzeichen zu berücksichtigen.
Sleske

14
:set textwidth=30

Wie geht die Textbreite damit um, wenn keine Leerzeichen vorhanden sind, wie im Beispiel des Originalplakats? Ich hatte ein Spiel und es scheint nur basierend auf der Textbreite zu formatieren, wenn Leerzeichen vorhanden sind (oder vermutlich, wenn die breakat-Variable auf etwas anderes gesetzt ist).
Andy

3
@Andy textwidthbehandelt keine Situation ohne Leerzeichen. Sie können dazu Ihre eigene formatexprFunktion schreiben .
Swaroop CH

8

Wenn Sie Text ohne Leerzeichen haben, den Sie in einer bestimmten Länge unterbrechen möchten, müssen Sie weder extern verwenden foldnoch Ihren eigenen schreiben formatexpr.

:%s/\(.\{80\}\)/\1\r/g

bricht alle Zeilen bei 80 Zeichen.


2
Dies hat mir den Tag gerettet, als ich ein OpenSSL-Zertifikat wiederbelebt habe. Vielen Dank
Cengiz Can
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.