Welchen Befehl kann ich ausführen, um Leerzeilen in Vim zu entfernen?
Welchen Befehl kann ich ausführen, um Leerzeilen in Vim zu entfernen?
Antworten:
: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 lautet :d
(Löschen)
:%!cat -s
kann die Wahl sein ..
Fand es, es ist:
g/^\s*$/d
Quelle: Kraft von g bei vim wikia
Kurze Erklärung von
:g
:[range]g/pattern/cmd
Dies wirkt sich auf den angegebenen [Bereich] (standardmäßige gesamte Datei) aus, indem der Ex-Befehl cmd für jedes Zeilenvergleichsmuster ausgeführt wird (ein Ex-Befehl beginnt mit einem Doppelpunkt, z. B.
:d
zum Löschen). Vor dem Ausführen von cmd wird ".
" auf die aktuelle Zeile gesetzt.
:v/./d
oder
:g/^$/d
oder
:%!cat -s
Das Folgende kann verwendet werden, um nur mehrere Leerzeilen zu entfernen (sie auf eine einzelne Leerzeile zu reduzieren) und einzelne Leerzeilen intakt zu lassen:
:g/^\_$\n\_^$/d
\_$
bedeutet das Zeilenende , das innerhalb eines Musters verwendet werden $
kann ( kann nur am Ende des Musters verwendet werden). Gleiches gilt \_^
für den Zeilenanfang und kann überall innerhalb des Musters verwendet werden. Das Muster entspricht also einer leeren Zeile, einer neuen Zeile und erneut einer leeren Zeile. Siehe Vim Regex-Hilfeseite .
:g/^$/,/./-j
wie man alle Leerzeilen entfernt
:%s,\n\n,^M,g
(Tun Sie dies mehrmals, wenn alle leeren Zeilen verschwunden sind.)
So entfernen Sie alle Leerzeilen, wobei die EINZELNE leere Zeile übrig bleibt
:%s,\n\n\n,^M^M,g
(mehrmals tun)
wie man alle Leerzeilen entfernt und ZWEI Leerzeilen bei MAXIMUM belässt,
:%s,\n\n\n\n,^M^M^M,g
(mehrmals tun)
Um ^ M einzugeben, muss ich Q und M in Windows steuern
\r
anstelle der verwenden Ctrl-M
.
Wie wäre es mit:
:g/^[ \t]*$/d
arbeite mit perl in vim:
:%!perl -pi -e s/^\s*$//g
chomp
auch den Job machen?
Diese Funktion entfernt nur zwei oder mehr Leerzeilen, fügt die folgenden Zeilen in Ihr vimrc ein und ruft dann mit \ d die Funktion auf
fun! DelBlank()
let _s=@/
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>
Ich habe einige der Antworten auf dieser Seite ausprobiert, aber viele haben bei mir nicht funktioniert. Vielleicht, weil ich Vim unter Windows 7 verwende (nicht verspotten, nur Mitleid mit mir haben: 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
: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 dann in Ihrem .vimrc Ihr 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!
Wenn Ihr Text einen doppelten Zeilenabstand hat, entfernt dieser Befehl den doppelten Abstand und führt bereits vorhandene, sich wiederholende Leerzeilen zu einer einzelnen Leerzeile zusammen. Es wird ein temporäres Trennzeichen von ^^^ am Anfang einer Zeile verwendet. Wenn dies mit Ihrem Inhalt kollidiert, wählen Sie etwas anderes. Zeilen, die nur Leerzeichen enthalten, werden als leer behandelt.
%s/^\s*\n\n\+/^^^\r/g | g/^\s*$/d | %s/^^^^.*
Das hat bei mir funktioniert:
:%s/^[^a-zA-Z0-9]$\n//ig
Grundsätzlich werden alle Zeilen gelöscht, die keine Zahl oder keinen Buchstaben haben. Da alle Elemente in meiner Liste Buchstaben enthielten, wurden alle Leerzeilen gelöscht.