web-dev-qa-db-fra.com

Comment puis-je supprimer plusieurs lignes dans vi?

J'ai essayé de suivre ce qui suit:

Comment supprimer le texte sélectionné dans l'éditeur de VI

mais

5dd

donne

E492: Pas une commande de l'éditeur: 5dd

J'ai alors essayé:

5d

Ce qui ne supprime qu'une seule ligne. Comment puis-je supprimer plusieurs lignes?

104
deltanovember

On dirait que vous entrez les commandes en mode commande (ou "mode Ex"). Dans ce contexte, :5d supprime la ligne 5, rien d’autre. Pour que 5dd fonctionne comme prévu (c’est-à-dire, supprimez cinq lignes consécutives en commençant par le curseur), entrez-le en mode normal et ne préfixez pas les commandes avec :.

114
souser12345

Je trouve cela plus facile

  1. Aller en mode VISUEL Shift+v
  2. Sélectionnez des lignes
  3. d supprimer

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

149
KCD

Vous pouvez supprimer plusieurs lignes si vous connaissez les numéros de ligne:

:[start_line_no],[end_line_no]d

Remarque: d signifie supprimer

où,
start_line_no est la ligne de départ non que vous souhaitez supprimer et end_line_no est la dernière ligne non que vous souhaitez supprimer. Les lignes entre le début et la fin, y compris le début et la fin seront supprimées.

Par exemple:

:45,101d

Les lignes entre 45 et 101 dont 45 et 101 seront supprimées.

117
Bonnie Varghese

Commandes répertoriées pour une utilisation en mode normal (préfixe avec : pour le mode commande).
Testé dans Vim.

Par montant de ligne:

  • num dd - effacera num lignes DOWN débutant à partir de la position actuelle du curseur (par ex. 5dd supprime la ligne en cours et 4 lignes en dessous => supprime la ligne en cours et ( num-1 ) les lignes en dessous)
  • num dk - supprimera num les lignes HAUT de la ligne actuelle et la ligne actuelle elle-même (par exemple, 3dk supprime la ligne en cours et 3 lignes au-dessus => supprime la ligne en cours et num lignes au-dessus)

Par numéro de ligne:

  • d num G - effacera les lignes de la ligne actuelle (incluse) UP au numéro de ligne num (inclusif) (par exemple si le curseur est sur ligne 5 d2G supprime les lignes 2 à 5 inclus)
  • d num gg - effacera les lignes de la ligne courante (incluse) DOWN au numéro de ligne num (inclusif) (par exemple si le curseur est actuellement sur la ligne 2 d6gg supprime les lignes 2 à 6 inclus)
  • (mode commande uniquement: num1 , num2 d - effacera les lignes numéro de ligne num1 (inclus) DOWN jusqu'au numéro de ligne num2 (inclus). Remarque: si num1 est supérieur à num2 - vim réagira avec Backwards range given, OK to swap (y/n)?
11
Filipp W.

d5d "coupe" cinq lignes

J'ai l'habitude de jeter le numéro au milieu comme:

d7l = supprimer 7 lettres

8
Lon

Appuyez sur la Esc clé pour vous assurer que vous n'êtes pas en mode édition. Placez le curseur sur la première ligne à supprimer. Entrez :5dd. La ligne actuelle et les quatre lignes suivantes doivent être supprimées.

Alternativement, si vous avez activé la numérotation des lignes ...

Appuyez sur la Esc clé pour vous assurer que vous n'êtes pas en mode édition. Entrez :#,#d où '#' représente les numéros de ligne de début et de fin à supprimer.

7
Brian S. Wilson

Si vous préférez une méthode en mode non visuel et que vous reconnaissez les numéros de ligne, j'aimerais vous suggérer un autre moyen simple.

Exemple

Je veux supprimer le texte de la ligne 45 à la ligne 101.

Ma méthode vous suggère de taper une commande ci-dessous en mode commande:

45Gd101G

Ça lit:

Allez à la ligne 45 (45G), puis supprimez le texte (d) de la ligne actuelle jusqu'à la ligne 101 (101G).

Notez que sur vim, vous pouvez utiliser gg au lieu de G.

Comparez avec la réponse de @Bonnie Varghese qui est:

:45,101d[enter]

La commande ci-dessus de sa réponse nécessite 9 fois de frappe, y compris enter, où ma réponse nécessite 8 à 10 fois de frappe. Ainsi, une vitesse de ma méthode est comparable.

Personnellement, je préfère moi-même 45Gd101G à :45,101d parce que j'aime bien respecter la syntaxe de la commande de vi, dans ce cas:

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

Si vous souhaitez supprimer une plage APRÈS un déclencheur de ligne spécifique, vous pouvez utiliser quelque chose comme ceci

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

Cela supprime 11 lignes (incluses) après chaque rencontre de ^TMPDIR.

3
Evan Carroll

c'est dxd, pas ddx

si vous souhaitez supprimer 5 lignes, placez le curseur au début de la première ligne à supprimer et d5d

1
chris

Pour effacer toutes les lignes, utilisez - ESC gg dG Pour effacer quelques lignes, dites 5 puis utilisez ESC 5dd

1
  1. Esc  pour quitter le mode insertion
  2. :1enter  allez à la ligne 1 (remplacez '1' par la ligne qui vous intéresse)
  3. 5dd  supprime 5 lignes (de la ligne actuelle)

Type :set number (pour les lignes numérotées).

0
JSON C11