Comment puis-je supprimer plusieurs lignes dans vi?


129

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 d'éditeur: 5dd

J'ai ensuite essayé:

5d

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


2
Pour autant que je me souvienne, 5dd devrait être une syntaxe valide et devrait supprimer 5 lignes en commençant par celle sur laquelle se trouve le curseur. Y a-t-il une chance que CAPS LOCK soit activé et que vous utilisez une disposition de clavier qui entraîne le décalage des touches numériques quand c'est le cas?
Eric J.

Réponses:


132

On dirait que vous entrez les commandes en mode commande (alias «mode Ex»). Dans ce contexte :5d, supprimerait la ligne numéro 5, rien d'autre. Pour 5ddfonctionner comme prévu - c'est-à-dire, supprimez cinq lignes consécutives commençant au curseur - entrez-le en mode normal et ne préfixez pas les commandes avec :.



142

Vous pouvez supprimer plusieurs lignes (plage) 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ébut non que vous souhaitez supprimer et end_line_no est la ligne de fin 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.


14
Vous pouvez également utiliser $pour désigner la dernière ligne du fichier. Donc :45,$dsupprimerait chaque ligne de 45 jusqu'à la fin.
freethebees

Vous pouvez même utiliser des modèles comme/<\/div>/
Björn

1
Si vous voulez commencer la plage à partir de la ligne sur laquelle vous vous trouvez actuellement, vous pouvez le faire:.,[end_line_no]d
Joe

15

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

Par montant de ligne:

  • numdd - supprime num valeur de départ lignes vers le bas à partir de la position actuelle du curseur (par exemple , 5ddentraîne la suppression de la ligne courante et 4 lignes sous ce => supprime la ligne courante et de ( num-1 lignes) sous elle )
  • numdk - supprime num lignes UP de la ligne actuelle et la ligne de courant lui - même (par exemple , 3dkentraîne la suppression de la ligne courante et de 3 lignes ci - dessus , il => supprime ligne courante et num lignes au- dessus )

Par numéros de ligne:

  • dnumG - supprimera les lignes de la ligne actuelle (inclus) UP jusqu'au numéro de ligne num (inclus) (par exemple, si le curseur est actuellement sur la ligne 5 d2G, supprimera les lignes 2-5 incluses)
  • dnumgg - supprimera les lignes de la ligne actuelle (inclus) DOWN jusqu'au numéro de ligne num (inclus) (par exemple, si le curseur est actuellement sur la ligne 2 d6gg, supprimera les lignes 2-6 incluses)
  • ( mode commande uniquement ) :num1 ,num2d - supprimera 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 avecBackwards range given, OK to swap (y/n)?

1
Cela m'a aidé car je n'avais pas réalisé que num 'd' 'd' essayait de supprimer sous le curseur. J'avais mon curseur au bas du fichier essayant de supprimer les lignes au-dessus de mon curseur! Merci pour l'aide!
Jonathan Chad Faling

Suppression par numéro de lin: ': <start>, $ d' supprimera jusqu'à la fin du fichier.
Devolus

11

Si vous préférez une méthode en mode non visuel et reconnaissez les numéros de ligne, je voudrais vous suggérer une autre manière simple.

Exemple

Je souhaite 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 à la ligne 101 ( 101G).

Notez que vimvous pouvez utiliser ggà la place de G.

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

:45,101d[enter]

La commande ci-dessus à partir de sa réponse nécessite 9 fois la saisie, 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 me préfère 45Gd101Gplus :45,101dparce que je aime coller à la syntaxe de la commande du vi, dans ce cas est:

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

8

d5d "coupe" cinq lignes

Habituellement, je jette simplement le nombre au milieu comme:

d7l = supprimer 7 lettres


7

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

Sinon, si la numérotation des lignes est activée ...

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


Je ne pense pas que cela fonctionne avec le colon au début.
Paria

@PoeteMaudit Ce sont des commandes vi valides. Les deux points amènent vi à déplacer le curseur vers le bas de l'écran et à accepter une commande d'éditeur de ligne.
Kenster

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

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


3

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

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

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


0

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


0

Pour supprimer toutes les lignes, utilisez - ESC gg dG Pour supprimer quelques lignes, disons 5 puis utilisez ESC 5dd


-1

Cela pourrait être fait comme suit.

  1. Placez le curseur à l'endroit que vous souhaitez supprimer.
  2. Appuyez sur "v" pour démarrer la sélection visuelle.
  3. Amenez le curseur sur la position que vous souhaitez supprimer à l'aide de la touche fléchée.
  4. Appuyez sur "d" qui supprimera les lignes.
  5. Maintenant, enregistrez et quittez avec ": x!"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.