it-swarm.com.de

Wie kann ich in vi mehrere Zeilen löschen?

Ich habe versucht, folgendes zu befolgen:

So löschen Sie ausgewählten Text im VI-Editor

aber

5dd

gibt

E492: Kein Editorbefehl: 5dd

Ich habe dann versucht:

5d

Womit nur eine einzelne Zeile gelöscht wird. Wie kann ich mehrere Zeilen löschen?

104
deltanovember

Klingt so, als würden Sie die Befehle im Befehlsmodus eingeben (auch bekannt als "Ex-Modus"). In diesem Zusammenhang würde :5d Zeile 5 entfernen, sonst nichts. Damit 5dd Wie vorgesehen funktioniert, dh fünf aufeinanderfolgende Zeilen ab dem Cursor entfernen - im normalen Modus eingeben und den Befehlen kein : Voranstellen.

114
souser12345

Ich finde das einfacher

  1. Gehen Sie in den VISUAL-Modus Shift+v
  2. Linien auswählen
  3. d löschen

https://superuser.com/questions/170795/how-can-i-select-and-delete-lines-of-text-in-vi

149
KCD

Sie können mehrere (Bereichs-) Zeilen löschen, wenn Sie die Zeilennummern kennen:

:[start_line_no],[end_line_no]d

Hinweis: d steht für Löschen

wo,
start_line_no ist die Anfangszeile, die Sie löschen möchten, und end_line_no ist die Endzeile, die Sie löschen möchten. Die Zeilen zwischen Anfang und Ende, einschließlich Anfang und Ende, werden gelöscht.

Z.B:

:45,101d

Die Zeilen zwischen 45 und 101, einschließlich 45 und 101, werden gelöscht.

117
Bonnie Varghese

Befehle, die zur Verwendung im normalen Modus aufgeführt sind (Präfix mit : für den Befehlsmodus).
Getestet in Vim.

Nach Zeilenbetrag:

  • num dd - löscht num Zeilen nach unten, beginnend mit der Zählung ab der aktuellen Cursorposition (z. B. 5dd löscht die aktuelle Zeile und 4 Zeilen darunter => löscht die aktuelle Zeile und num-1 ) Zeilen darunter)
  • num dk - löscht num Zeilen UP aus der aktuellen Zeile und der aktuellen Zeile selbst (z. B. 3dk löscht die aktuelle Zeile und 3 Zeilen darüber => löscht die aktuelle Zeile und num Zeilen darüber)

Nach Zeilennummern:

  • d num G - löscht die Zeilen von der aktuellen Zeile (einschließlich) bis zur Zeilennummer num (einschließlich) (z. B. wenn der Cursor derzeit eingeschaltet ist Zeile 5 d2G löscht die Zeilen 2-5 (einschließlich)
  • d num gg - löscht die Zeilen von der aktuellen Zeile (einschließlich) DOWN bis zur Zeilennummer num (einschließlich) (z. B. wenn der Cursor gerade ist) in Zeile 2 d6gg löscht die Zeilen 2-6 (einschließlich)
  • (nur Befehlsmodus: num1 , num2 d - löscht die Zeilen Zeilennummer num1 (einschließlich) DOWN bis zur Zeilennummer num2 (einschließlich). Hinweis: Wenn num1 größer als num2 - vim reagiert mit Backwards range given, OK to swap (y/n)?
11
Filipp W.

d5d "schneidet" fünf Zeilen

Normalerweise wirf ich die Zahl einfach in die Mitte wie folgt:

d7l = 7 Buchstaben löschen

8
Lon

Drücken Sie die Esc Taste, um sicherzustellen, dass Sie sich nicht im Bearbeitungsmodus befinden. Stellen Sie den Cursor in die erste zu löschende Zeile. Eingeben :5dd. Die aktuelle Zeile und die nächsten vier Zeilen sollten gelöscht werden.

Alternativ, wenn Sie die Zeilennummerierung aktiviert haben ...

Drücken Sie die Esc Taste, um sicherzustellen, dass Sie sich nicht im Bearbeitungsmodus befinden. Eingeben :#,#d wobei '#' für die zu löschenden Anfangs- und Endzeilennummern steht.

7
Brian S. Wilson

Wenn Sie einen nicht-visuellen Modus bevorzugen und die Zeilennummern bestätigen, möchte ich Ihnen einen anderen einfachen Weg vorschlagen.

Beispiel

Ich möchte Text von Zeile 45 bis Zeile 101 löschen.

Meine Methode schlägt vor, dass Sie im Befehlsmodus den folgenden Befehl eingeben:

45Gd101G

Es liest:

Gehe zu Zeile 45 (45G) lösche dann den Text (d) aus der aktuellen Zeile in die Zeile 101 (101G).

Beachten Sie, dass Sie auf vimgg anstelle von G verwenden können.

Vergleichen Sie mit der Antwort von @Bonnie Varghese:

:45,101d[enter]

Der obige Befehl aus seiner Antwort erfordert 9-mal die Eingabe einschließlich enter, wo meine Antwort 8 - 10mal erfordert, tippend. Somit ist eine Geschwindigkeit meiner Methode vergleichbar.

Ich persönlich bevorzuge 45Gd101G Über :45,101d weil ich mich gerne an die syntax des vi befehls halte, ist in diesem fall:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+
7
fronthem

Wenn Sie einen Bereich NACH einem bestimmten Zeilentrigger löschen möchten, können Sie so etwas verwenden

:g/^TMPDIR/ :.,+11d

Das löscht 11 Zeilen (inklusive) nach jeder Begegnung von ^TMPDIR.

3
Evan Carroll

es ist dxd, nicht ddx

wenn Sie 5 Zeilen löschen möchten, bewegen Sie den Cursor an den Anfang der ersten zu löschenden Zeile und d5d

1
chris

Um alle Zeilen zu löschen, verwenden Sie - ESC gg dG. Um einige Zeilen zu löschen, sagen wir 5 und verwenden Sie dann ESC 5dd

1
  1. Esc  zum Verlassen des Einfügemodus
  2. :1enter  gehe zu Zeile 1 (ersetze '1' durch die Zeile, die dich interessiert)
  3. 5dd  lösche 5 Zeilen (aus der aktuellen Zeile)

Typ :set number (für nummerierte Zeilen).

0
JSON C11