web-dev-qa-db-fra.com

Comment supprimer des lignes sous la ligne actuelle dans vim?

Existe-t-il une commande pour supprimer une ligne (ou plusieurs lignes) immédiatement en dessous de la ligne actuelle? Actuellement, je le fais comme: jdd et alors . à répéter au besoin. Existe-t-il une commande qui combinerait tout cela?

MISE À JOUR: La raison pour laquelle je voudrais avoir une telle commande est que je n'aime pas m'éloigner de la position actuelle, mais pouvoir supprimer les lignes ci-dessous.

63
Valentin

La commande delete ex fonctionnera bien.

:+,$d

Cela supprimera toutes les lignes du +1 actuel jusqu'à la fin ($)

Pour supprimer les 2 lignes suivantes, la plage suivante fonctionnerait, +1,+2 Ou raccourci +,+2

:+,+2d

Comme @ib l'a mentionné, la commande :delete Ou :d Déplace le curseur au début de la ligne à côté du texte supprimé. (Même avec nostartofline set). Pour surmonter cela, nous pouvons émettre la commande en mode normal ``. `` Reviendra à la position exacte avant le dernier saut, dans ce cas la commande :d. Notre commande est maintenant

:+,+2denter``

Ou comme une seule commande ex

:+,+2d|norm! ``

Pour rendre cela plus facile, nous emballons tout cela dans une commande:

command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``

Maintenant, supprimez les 3 lignes suivantes:

:3D

Cette commande peut également prendre un {reg} Comme :delete Et :yank. Donc, supprimer les 4 lignes suivantes dans le registre a serait:

:4D a

Pour plus d'informations

:h :d
:h :command
:h :command-register
:h :command-count
:h ``
135
Peter Rincker

dG devrait marcher.
Cela signifie supprimer toutes les lignes jusqu'à la fin du fichier du curseur actuel.

64
Anand Nagaraj

Cela supprimera TOUTES les lignes sous la ligne actuelle:

jdG

Malheureusement, cela déplacera le curseur au début de la ligne actuelle après la suppression.

26
ClosedID

eh bien, pour le faire, vous pouvez simplement utiliser la commande xxdd. La plupart du temps, je connais (au moins une idée) la taille du script que je modifie. Ainsi, la commande ci-dessous est généralement plus que suffisante:

  • 99dd
  • 999dd pour supprimer 999 lignes à partir de la position du curseur.
  • 9999dd
  • 99999dd pour un script très long;)
7
xaa

Les autres solutions sont informatives, mais je pense qu'il serait plus simple d'utiliser une macro pour cela:

qq (commence l'enregistrement)

jddk (descendez, supprimez la ligne et remontez - c'est-à-dire la chose que vous voulez faire)

q (terminer l'enregistrement)

Vous pouvez maintenant faire @q pour effectuer cette action, en maintenant le curseur à la position actuelle. Vous pouvez également faire quelque chose comme 5@q pour supprimer 5 lignes sous le curseur.

Et enfin, si vous répétez l'action plus d'une fois, vous pouvez simplement taper @@ après la première exécution de @q (cela répète la dernière macro utilisée - dans ce cas q)

4
mindthief

C'est un travail pour les marques!

Essayez maj20dd`a

ma définit la marque spécifique au fichier 'a', j20dd effectue la suppression souhaitée (20 lignes dans ce cas) et `a vous ramène à la position de la marque (ligne et colonne).

Évidemment, ce modèle peut être étendu pour faire tout ce que vous voulez avant de revenir à la marque. Si vous utilisez mA (ou toute autre lettre majuscule), la marque sera en fait unique entre les fichiers, vous pouvez donc même la modifier ailleurs avant de revenir. Si vous avez une utilisation très fréquente, vous pouvez en faire une macro comme suggéré ci-dessus.

2
Alex Feinman

Vous pouvez entrer le nombre de lignes à supprimer: j2ddk.

1
Paul Ruane