Löschen Sie 100 Zeilen aus dem vi-Editor mit einem einzigen Befehl


33

Ich benutze Ubuntu und versuche, alle 100 Zeilen aus dem viEditor zu löschen, aber ich habe die Frage, ob ich das mit einem Befehl machen soll.


Keine VI-Lösung, sondern über die Befehlszeile: echo -n > <file>Entfernt alle Zeilen aus einer Datei (tatsächlich wird die Datei nur mit "" überschrieben).
azz

3
@Der Keine Notwendigkeit, echoüberhaupt dafür zu verwenden; > $filefunktioniert gut
ein

4
Was ist das für ein Unternehmen, das viin einem Interview Fragen stellt ?
ein CVn

2
Diese Frage lässt sich leicht mit einem rudimentären Wissen über vi beantworten. vim-gtkGeben Sie auf einem Computer mit installiertem vim (unter Ubuntu empfehle ich das Paket, da Sie dadurch Zugriff auf das xclipboard in vim erhalten) vimtutoran der Befehlszeile (nicht in vim) ein, um ein interaktives Tutorial der Grundlagen zu erhalten. Es sollte nicht länger als eine halbe Stunde dauern und es ist die beste Anleitung für den Einstieg in vi / vim, die Sie wahrscheinlich finden werden.
Übelsuppe

1
@ MichaelKjörling Ich könnte mir vorstellen, dass es in einem Interview auftaucht, wenn der Bewerber zuvor Erfahrungen mit vi(mündlich oder durch Lebenslauf) erwähnt hat oder wenn die Frage mit "Okay, als Sysadmin müssen Sie etwas über Kommandozeilen-Editoren wissen, richtig ? Sie haben verwendet vi? "
Wildcard

Antworten:


62

Tun Sie dies im normalen Modus

100dd

ddlöscht die aktuelle Zeile. Wenn Sie diesen Befehl voranstellen, wird 100er 100 Mal wiederholt.

Wenn die Datei weniger als 100 Zeilen enthält, beginnend mit der aktuellen Zeile, werden je nach viImplementierung entweder keine oder so viele wie vorhanden gelöscht. Dies vimhängt davon ab, ob die Option cpaka compatibleaktiviert ist oder nicht.


falsche Antwort löscht nur die aktuelle Zeile
mayur Mehta

Ich möchte 100 Zeilen mit einem Befehl auf einmal löschen
Mayur Mehta

13
100ddist die richtige Antwort. Ich frage mich, was du machst.
ott--

1
@mayurMehta weiß nicht, welches Unternehmen solche Fragen stellt, und weiß nicht, was sie als Antwort erwarten. Aber jeder Anfänger VI-Benutzer wird wissen, dass 100dd die richtige Antwort ist.
Munim

1
@vgoff Ich weiß nicht .. Wenn sie nicht nach einer generellen Lösung suchen, um ihre grundlegenden Vim-Fähigkeiten zu testen, dann ist es nur eine trickreiche Frage, die Befragten zu überraschen. Ich würde sagen, 100dd ist die Antwort. Wenn der Interviewer fragt "Was passiert, wenn die Datei weniger als 100 Zeilen vom aktuellen Cursor enthält?", Würde ich antworten: "Der Befehl löscht das, was er kann, vom aktuellen Cursor." Das ist völlig zumutbar. Warum sollte sich der Cursor nicht in der ersten Zeile befinden, es sei denn, der Interviewer stellt dies klar? Ich hasse solche Trickfragen.
Munim

44
  1. Löscht 100 Zeilen vorwärts (einschließlich) der aktuellen Zeile

    • wiederhole dd (aktuelle Zeile löschen) 100 mal:

      100dd
      
    • Löscht von der aktuellen Zeile auf 99 Zeilen vorwärts

      d99j
      
  2. Lösche 100 Zeilen rückwärts (einschließlich) der aktuellen Zeile

    d99k
    
  3. Zeilen in einem bestimmten Bereich nach Zeilennummer löschen

    :1,100d
    
  4. Zeilen in einem Bereich löschen, der mit der aktuellen Zeile beginnt

    :.,.+99d
    

usw. usw.


2
Nummer 4 löscht die aktuelle Zeile (0) bis zur 101. (0 + 100) Zeile, daher 101 Zeilen anstelle der 100. Versuch:.,+99d
Olivier Dulac

Drat, und ich habe die richtigen Bewegungen! Vielen Dank.
Nutzlos

100dd hat auch für mich nicht funktioniert - aber # 4 oben funktioniert für mich in VI unter Solaris 10
einwandfrei

8

Wenn alle Zeilen in der Datei gelöscht werden sollen, gibt der Befehl vi den Löschbereich an:

:1,$d

1bezeichnet die erste Zeile und $bezeichnet die letzte Zeile


oder :%d (in ":" Kontext, ":% ..." ist Abkürzung für ": 1, $ ...")
Olivier Dulac

auch schön: d Gtasten & rarr; Töte alle Inhalte von der aktuellen [zB obersten Zeile] bis zur untersten Zeile
Erch

3

Sie möchten alle Zeilen einer Datei löschen? Öffnen Sie die Datei mit vi. Während Sie sich am Anfang der ersten Zeile befinden - der Standardposition des Cursors beim Öffnen der Datei - drücken Sie Escgefolgt von dG.

Zu beachten ist, dass die Aktion " dLöschen" und Gdie letzte Zeile der Datei angibt. Während Sie auf eine beliebige Zeile drücken dG, wird die gesamte Zeile von der aktuellen bis zur letzten Zeile gelöscht.

Wenn Sie wissen , welche aufeinanderfolgende Zeilen löschen - etwa von der Linie 101-200 - Typen in den folgenden Tastenkombinationen: Esc:101,200d.


Sie müssen nicht die Escape-Taste drücken, wenn Sie die Datei gerade geöffnet haben und sich am Anfang der Datei befinden. Sie befinden sich automatisch (standardmäßig) im normalen Modus.
VGOFF

3

Egal wo Sie sich in der Datei befinden, Sie können dies tun ggdG

:%dwürde besser in weniger Tastendrücken tun. Nun, wenn man die Tasten shiftund zählt enter, sind es tatsächlich zwei Tastendrücke mehr als oben.

Wenn Sie so etwas tun, werden 100ddnur bis zu 100 Zeilen von Ihrem aktuellen Standort aus gelöscht. Abhängig von Ihrer aktuellen Zeilenposition werden möglicherweise nicht alle Zeilen aus der Datei gelöscht.


0

Esc n dd. n ist die Anzahl der zu löschenden Zeilen einschließlich der aktuellen Zeile. Drücken Sie die "Esc" -Taste, dann "n" und dann "dd". Zum besseren Verständnis


Was ist die Notwendigkeit der Flucht hier
Prvt_Yadav

Diese Antwort ist identisch mit der akzeptierten Antwort.
Kusalananda

Escape ist nur für den Fall, dass Sie sich im Einfügemodus befinden.
Rida Abid
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.