Angenommen, Sie haben ein langes Dokument in vim mit aktiviertem automatischen Zeilenumbruch eingegeben, sodass alle Zeilen beispielsweise mit 79 Zeichen unterbrochen wurden. Möglicherweise haben Sie sogar das gesamte Dokument formatiert, um alle Zeilen in dieser Länge zu unterbrechen.
Absätze werden in Ihrem Dokument durch Leerzeilen abgegrenzt.
Jetzt entscheiden Sie, dass Sie überhaupt keine Zeilenumbrüche innerhalb von Absätzen möchten.
Wie können Sie alle Zeilenumbrüche innerhalb von Absätzen entfernen, ohne die Absatzgrenzen vollständig zu entfernen?
Ich habe diesen schnellen und idiotischen Hack gemacht, suche aber nach dem richtigen Weg.
:%s/^\s*$/@@@@@ - replace blank lines with @@@@@
ggVGgJ - join all lines in the file
:%s/@@@@@/\r\r/g - replace @@@@@ with line breaks
vim
newlines
carriage-return
dggoldst
quelle
quelle
Antworten:
Ich denke, das macht, was Sie wollen: Stellen Sie sicher, dass am Ende der Datei eine leere Zeile steht, und verbinden Sie dann jeden Absatz (der durch eine leere Zeile abgeschlossen wird).
Erläuterung: Gehen Sie zuerst zum Ende der Datei und fügen Sie eine zusätzliche leere Zeile hinzu
:a
(möglicherweise gibt es eine elegantere Möglichkeit, dies zu tun; interaktiv können Sie die ersten drei Zeilen durch ersetzeno<ESC>
). Wenden Sie dann für jede nicht leere Zeile, die noch nicht berücksichtigt wurde (:g/^./
), denjoin
Befehl auf den Bereich an, der an der ausgewählten Zeile beginnt (.
) und eine Zeile vor der nächsten leeren Zeile endet (/^$/-1
).:g/^$/d
Wenn Sie nicht möchten, dass eine leere Zeile übrig bleibt, können Sie optional die entfernen-1
.quelle
:g
, der einen Befehl auf alle übereinstimmenden Zeilen anwendet. Sehen Sie:help :g
und vielleicht diesen Thread darüber, wie:g
sich das Löschen von Zeilenumbrüchen verhält .:$pu _
am Ende das Schwarzlochregister setzen, was am Ende zu einer leeren Zeile führt.Dies sollte es tun:
tw
ist auf einen Wert eingestellt, der mindestens so groß ist wie die Anzahl der Zeichen im längsten Absatz.gg
bewegt den Cursor in die erste Zeile;gq
ist der Befehl zur Neuformatierung;G
Bewegt den Cursor in die letzte Zeile und weist ihngq
an, von der aktuellen Cursorposition in die letzte Zeile neu zu formatieren.quelle
Setzen Sie den Cursor innerhalb des gewünschten Absatzes
Art:
vipJ
(
vip
hebt den aktuellen Absatz hervor,J
verbindet alle Zeilen)quelle
Könnte nicht der sauberste Weg sein, aber hier ist, was ich verwenden würde:
( Funktioniert in VIM 7.2. )
Abhängig davon, wie genau die Absätze bei der ursprünglichen Formatierung aufgeteilt wurden, möchten Sie möglicherweise den
gJ
Befehl (Join ohne Leerzeichen) durch denJ
Befehl (Join with Leerzeichen) ersetzen .Die willkürliche
999
Anzahl muss nur mindestens die Anzahl der Absätze in der Datei sein. Sie können eine größere Anzahl auswählen, wenn Sie nur Prozessorzyklen verlieren möchten. Unter der Annahme einer und nur einer Leerzeile zwischen Absätzen können Sie eine genauere Absatzanzahl erhalten, indem Sie:quelle