785 Stimmen

Vim leere Zeilen löschen

Welchen Befehl kann ich ausführen, um leere Zeilen in Vim zu entfernen?

1438voto

soulmerge Punkte 70900
:g/^$/d

:g führt einen Befehl in den Zeilen aus, die einem Regex entsprechen. Die Regex ist "Leerzeile" und der Befehl lautet :d (löschen)

55 Stimmen

Danke soulmerge. Dies ist meine Lieblingsantwort, da sie tatsächlich erklärt, was der Befehl :g bewirkt.

5 Stimmen

Dadurch werden alle leeren Zeilen (die keine Leerzeichen enthalten) gelöscht, aber das ist vielleicht nicht die einzige Anforderung. Jemand kann immer noch eine der leeren Zeilen behalten. :%!cat -s kann die Wahl sein..

3 Stimmen

:g/^ \s *$/d mit einer Regex von 'any possible space char' in der Zeile

221voto

nearly_lunchtime Punkte 11435

Gefunden, es ist:

g/^\s*$/d

Source : Macht der g bei vim wikia

Kurze Erläuterung von :g

:[range]g/pattern/cmd

Dies wirkt sich auf die angegebene [Bereich] (standardmäßig ganze Datei), indem Sie den Ex-Befehl ausführen cmd für jede übereinstimmende Zeile Muster (ein Ex-Befehl ist ein Befehl, der mit einem Doppelpunkt beginnt, z. B. :d für löschen). Vor der Ausführung von cmd , " . " wird auf die aktuelle Zeile gesetzt.

9 Stimmen

Sehr schön. Aber nicht gerade eine leere Zeile.

15 Stimmen

Ah, ja, damit werden Zeilen gefunden, die nur Leerzeichen enthalten. Ich akzeptiere die Antwort von soulmerge.

17 Stimmen

Die auf leere Zeilen UND Zeilen, die nur aus Leerzeichen bestehen, passen sollte... (* passt auf null oder mehrere Instanzen von \s... )?

59voto

mandaleeka Punkte 6487
:v/./d

o

:g/^$/d

o

:%!cat -s

10 Stimmen

Netter Trick mit dem :v/./d (leichter zu tippen), aber dann muss man danach ein :nohl machen.

1 Stimmen

@ClaesMogren oder drücken Sie einfach auf control-l

6 Stimmen

@zladuric nach vim.wikia.com/wiki/Kraft_von_g es ist reVerse global (d.h. es führt den Befehl für alles aus, was nicht übereinstimmt)

46voto

Draemon Punkte 32703

Mit der folgenden Funktion können Sie nur mehrere Leerzeilen entfernen (auf eine einzige Leerzeile reduzieren) und einzelne Leerzeilen beibehalten:

:g/^\_$\n\_^$/d

3 Stimmen

Könnte mir jemand erklären, was die Token bedeuten? (Also, wie funktioniert es?) Danke.

5 Stimmen

\_$ bedeutet die Zeilenende die innerhalb eines Musters verwendet werden können ( $ kann nur am Ende des Musters verwendet werden). Dasselbe gilt für \_^ das heißt den Anfang einer Zeile und kann überall innerhalb des Musters verwendet werden. Das Muster passt also auf eine leere Zeile, einen Zeilenumbruch und wieder eine leere Zeile. Siehe Vim Regex-Hilfeseite .

1 Stimmen

Eine andere Möglichkeit, das Gleiche zu tun: :g/^$/,/./-j

16voto

gauge00 Punkte 151
  1. wie man alle Leerzeilen entfernt

    :%s,\n\n,^M,g

    (machen Sie dies mehrere Male, bis alle leeren Zeilen verschwunden sind)

  2. wie man alle Leerzeilen entfernt und eine einzige leere Zeile übrig lässt

    :%s,\n\n\n,^M^M,g

    (machen Sie dies mehrmals)

  3. wie man alle Leerzeilen entfernt, so dass MAXIMAL ZWEI Leerzeilen übrig bleiben,

    :%s,\n\n\n\n,^M^M^M,g

    (machen Sie dies mehrmals)

um ^M einzugeben, muss ich unter Windows Control-Q und Control-M drücken

2 Stimmen

Sie können auch Folgendes verwenden \r anstelle der Ctrl-M .

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