it-swarm.com.de

Vim leere Zeilen löschen

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

650
:g/^$/d

:g führt einen Befehl in Zeilen aus, die einem regulären Ausdruck entsprechen. Der reguläre Ausdruck ist 'Leerzeile' und der Befehl ist :d (Löschen)

1185
soulmerge

Fand es, es ist:

g/^\s*$/d

Quelle: Potenz von g bei vim wikia

Kurze Erklärung von :g

:[range]g/pattern/cmd

Dies wirkt sich auf die angegebene [range] (gesamte Standarddatei) aus, indem der Ex-Befehl cmd für jede übereinstimmende Zeile pattern (ein Ex-Befehl) ausgeführt wird beginnt mit einem Doppelpunkt wie :d zum Löschen). Vor der Ausführung von cmd wird "." auf die aktuelle Zeile gesetzt.

175
:v/./d

oder

:g/^$/d

oder

:%!cat -s
50
mandaleeka

Folgendes kann verwendet werden, um nur mehrere Leerzeilen zu entfernen (auf eine einzelne Leerzeile zu reduzieren) und einzelne Leerzeilen intakt zu lassen:

:g/^\_$\n\_^$/d
42
Draemon
  1. so entfernen Sie alle Leerzeilen

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

    (mache das mehrmals, wenn alle leeren Zeilen weg sind)

  2. so entfernen Sie alle Leerzeilen und lassen EINZELNE Leerzeile frei

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

    (mach das mehrmals)

  3. wie man alle Leerzeilen entfernt, wobei ZWEI Leerzeilen übrig bleiben AT MAXIMUM,

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

    (mach das mehrmals)

um ^ M einzugeben, muss ich Q und M in Windows steuern

14
gauge00

Wie wäre es mit:

:g/^[ \t]*$/d
6
anon

Diese Funktion entfernt nur zwei oder mehr Leerzeilen, fügt die folgenden Zeilen in den vimrc ein und ruft dann die Funktion mit\d auf

fun! DelBlank()
   let [email protected]/
   let l = line(".")
   let c = col(".")
   :g/^\n\{2,}/d
   let @/=_s
   call cursor(l, c)
endfun
map <special> <leader>d :keepjumps call DelBlank()<cr>
5
SergioAraujo

Das funktioniert bei mir

:%s/^\s*$\n//gc

5
allenhwkim

arbeite mit Perl in vim:

:%!Perl -pi -e s/^\s*$//g

5
niejieqiang

Ich habe einige der Antworten auf dieser Seite ausprobiert, aber viele davon haben bei mir nicht funktioniert. Vielleicht, weil ich Vim unter Windows 7 verwende (verspotte nicht, habe nur Mitleid mit mir: p)?

Hier ist die einfachste, die ich gefunden habe und die unter Vim in Windows 7 funktioniert:

:v/\S/d

Hier ist eine längere Antwort auf Vim Wikia: http://vim.wikia.com/wiki/Remove_unwanted_empty_lines

4
Pokey
:g/^\s*$/d
^ begin of a line
\s* at least 0 spaces and as many as possible (greedy)
$ end of a line

einfügen

:command -range=% DBL :<line1>,<line2>g/^\s*$/d

starten Sie in Ihrer .vimrc-Datei Ihre vim neu. Wenn Sie den Befehl 5,12DBL verwenden, werden alle Leerzeilen zwischen der 5. und 12. Zeile gelöscht. Ich denke meine Antwort ist die beste Antwort!

3
cn8341

Drücken Sie delete Drücken Sie im Einfügemodus, um Leerzeilen zu entfernen.

3
akp

Wenn Ihr Text doppelte Zeilenabstände aufweist, werden mit diesem Befehl die doppelten Abstände entfernt und bereits vorhandene, sich wiederholende Leerzeilen zu einer einzelnen Leerzeile zusammengeführt. Es wird ein temporäres Trennzeichen von ^^^ am Anfang einer Zeile verwendet. Wenn dies mit Ihrem Inhalt in Konflikt gerät, wählen Sie etwas anderes aus. Zeilen, die nur Leerzeichen enthalten, werden als Leerzeichen behandelt.

%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*
2
MisterW

Das hat bei mir funktioniert:

:%s/^[^a-zA-Z0-9]$\n//ig

Grundsätzlich werden alle Zeilen gelöscht, die weder eine Zahl noch einen Buchstaben enthalten. Da alle Elemente in meiner Liste Buchstaben enthielten, wurden alle Leerzeilen gelöscht.

1
user1481441