2012-03-26 4 views

Antwort

6

:%s/\s\{2,}//g

Wo die Elemente sind:

  • %s Ersatz in die gesamte Datei
  • \s was Ersatz: ein Raum
  • \{2,} zwei oder mehr Vorkommen
  • // mit nichts ersetzen (d löschen)
  • g es in der aktuellen Zeile bei jedem Auftreten zu tun (nicht nur auf dem ersten)

Die Elemente werden klarer werden, wenn Sie die anatomy of the substitute call sehen:

s/PATTERN/REPLACEMENT/FLAGS 

Also, die PATTERN in unserem Fall ist \s\{2,}, die REPLACEMENT ist leer und FLAGS sind nur g. Der Bereich wird vorangestellt und ist %, was die gesamte Datei angibt. Wenn Sie es nur auf einigen Linien tun mögen, können Sie die Linien visuell auswählen und geben Sie dann :s....


Edit:
In Ihrer Frage, schreiben Sie, dass Sie

zu

wollen lösche jedes doppelte Leerzeichen in einer Datei

Das habe ich geantwortet. Wenn Sie zwei ersetzen wollen und mehr Räume, die durch ein, würde der Befehl

:%s/\s\{2,}/ /g 
+1

Nur um einen kleinen Punkt zu verdeutlichen: Das '\ s' Muster passt nicht zu" einem Leerzeichen ", sondern eher zu Leerzeichen. In Vim würde das angegebene Muster einer Kombination von zwei oder mehr Instanzen von und entsprechen. – glts

0

Wie wäre es damit :%s/ */ /g

(es gibt zwei Räume zwischen / und *)

+0

Es sollte drei Leerzeichen geben und wenn Sie nur die gewünschten Tastenanschläge in einer eigenen Zeile haben, wird es korrekt formatiert (siehe Antwort unten). – RunHolt

0

Sie etwas tun können wie:

:%s/\s\s\+/ /g 
0

Obwohl die Antwort mit { am effizientesten ist, finde ich es ea sier sich an den Raum * Lösung zu erinnern. Die richtige Lösung würde drei Leerzeichen enthalten (weil * 0 oder mehr entspricht).

:%s/ */ /g 

Natürlich setzt dies voraus, auch Sie ersetzen möchten zwei oder mehr Räume mit einem einzigen Raum.

Verwandte Themen