Löschen Sie Leerzeichen für eine Reihe von Zeilen im Vim-Editor


12

Ich habe einen Text wie den folgenden in einer Datei:

  sample text
    some random text
            even more random text
text with no indent
 worst indention

Ich muss den leeren Raum vor jeder Zeile löschen. Für eine Zeile mache ich 0dw

Ich kann den gleichen Befehl mit wiederholen. aber durch manuelles Navigieren zu den nächsten Zeilen.

Aber gibt es eine Möglichkeit, '0dw' auf diesen Zeilenblock anzuwenden?

Ich nehme an, es gibt eine Möglichkeit, Makros zu verwenden, aber ich habe sie noch nicht verwendet. Aber ich bin bereit, sie zu lernen, wenn es keine andere Wahl gibt.


+1 nette Frage, am Ende mache ich viel von dem gleichen. Und willkommen auf der Website.
Sardathrion - gegen SE Missbrauch

Antworten:


10
:%s/^\s\+
" Same thing (:le = :left = left-align given range):
:%le

Weitere Informationen finden Sie hier unter http://vim.wikia.com/wiki/Remove_unwanted_spaces

Wenn Sie dies für einen bestimmten Zeilenbereich tun möchten:

:19,25s/^\s\+//

Übrigens: Der beste Weg, um mit dem Erlernen von Vim zu beginnen, besteht darin, einen vimtutorBefehl auszuführen. Hier erfahren Sie, wie Sie Vim im Vim-Editor verwenden.


1
: le war super und vielen Dank für die Alternativen und den Link :)
saiy2k

3
+1 für vimtutor Erwähnung sowie eine gute Antwort.
Sardathrion - gegen SE Missbrauch

1
Wählen Sie die relevanten Zeilen aus, Vindem Sie den Cursor verwenden und bewegen, um die Zeilenauswahl zu erweitern. Drücken Sie dann, :um automatisch einzugeben '<,'>, und von da an können Sie Nikhils regulären Ausdruck verwenden.
Onkel Zeiv

1
Eine andere Möglichkeit, eine Reihe von Zeilen zu erstellen (da ich die Zeilennummern immer vergesse), besteht darin, die beiden Zeilen zu markieren und die Markierungen zu bearbeiten. Gehen Sie beispielsweise zu Zeile 19 und drücken Sie 'ma', gehen Sie zu Zeile 25 und drücken Sie 'mb', dann tun Sie es :'a,'bs/^\s\+//.
Patrick

7

Eine alternative Möglichkeit hierfür ist die Verwendung der Einrückungswerkzeuge von VIM (normalerweise an </ gebunden >). Zuerst müssen Sie angeben, welche Linien betroffen sein werden. Sie können den visuellen Auswahlmodus oder ein anderes Mittel verwenden, um einen Bereich von Linien anzugeben, die betroffen sein sollen, und dann eine beliebig hohe Anzahl oder Einrückungsstufen zum Entfernen verwenden. 9<Normalerweise ist der Trick recht gut, um mindestens 9 Ebenen möglicher Einrückungen (Tabulatoren / Leerzeichen) aus den aktuellen Zeilen zu entfernen.


3

Ich habe einen Ansatz, um dies in den folgenden einfachen Schritten zu tun:

1. press `v` to go to visual selection mode
2. select the lines you want to affect
3. :'<,'>normal 0dw

Erklärung des dritten Schritts:

0 navigiert zum Zeilenanfang.

dw löscht das Wort (Leerzeichen).

normalwendet den Befehl an 0dw.

'<,'> Wiederholt den Normalwert für alle ausgewählten Zeilen im visuellen Modus.


1

ctrl+vermöglicht es Ihnen, etwas Ähnliches zu tun, was Sie wollen, aber nicht genau. Sie können einen visuellen Block auswählen und einen Befehl auf das Los anwenden.


2
Ich habe diese Zeilen im Block-Modus ausgewählt und dieser Befehl hat funktioniert :: '<,'> normal 0dw
saiy2k

1
@ saiy2k :normalist das Wichtigste hier und ich denke, es ist die beste Antwort hier. Könnten Sie es als Antwort posten?
Gilles 'SO - hör auf böse zu sein'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.