Couper et coller plusieurs lignes dans vim

J’utilise vim 7.3 sur un Mac 10.7.2 et j’ai du mal à couper et à coller plusieurs lignes.

Sur mon ancienne configuration Linux (qui a été volée et je ne connais pas les versions), je pourrais taper “dd” plusieurs fois, puis “p” les récupérer toutes. Par exemple: tapez: “dd dd” et deux lignes seront supprimées. Tapez maintenant “p” et les deux lignes sont collées dans le tampon.

Je sais que je peux accomplir ce que je veux en tapant “2dd”, puis “p” – mais je voudrais pouvoir “dd” -out lignes sans compter le nombre de lignes à l’avance.

Des idées?

Avez-vous envisagé d’utiliser le mode visuel ?

Vous pourriez juste aller:

  • Appuyez sur V
  • Sélectionnez tout ce que vous voulez couper sans compter
  • Appuyez sur d
  • Allez à l’endroit où vous voulez coller
  • Appuyez sur p

Cela devrait donner environ deux fois moins de frappes que la méthode dd puisque vous appuyez sur une touche par ligne plutôt que sur deux. Des points bonus si vous utilisez 5j (ou similaire) pour sélectionner plusieurs lignes à la fois.

Vous pouvez taper:

 dd 

est le nombre de lignes que vous souhaitez couper, puis vous pouvez les coller avec:

 p 

Par exemple, pour couper et coller 3 lignes:

 d3d p 

Vous ne savez pas si cela est assez proche de ce que vous essayez, mais une chose que vous pouvez faire est d’utiliser un registre spécifique et de mettre en majuscule votre nom de registre. Cela indique à vim d’append au registre plutôt que de le remplacer, donc si vous avez les lignes:

 one two three 

vous pouvez entrer

 "qdd "Qdd "Qdd 

et ensuite si vous entrez

 "qp 

il va recoller les lignes d’origine

Pour couper et coller par numéros de ligne (faire :set number pour voir les numéros de ligne), pour les lignes x à y faire:

 :x,yd 

ou si votre curseur est déjà sur la ligne x, faites

 :,yd 

Ensuite, allez à l’endroit où vous voulez coller et appuyez sur p

Je suis d’accord avec @Ben S. que c’est la méthode préférée pour y parvenir, mais si vous cherchez simplement à reproduire votre ancien comportement, vous pouvez reconfigurer dd pour l’append à un registre spécifié, puis mapper p pour coller ce registre et le supprimer. .
Cela aura l’inconvénient de faire en sorte que p ne fonctionne qu’avec les éléments supprimés en utilisant dd (utiliser d} pour supprimer à la fin du paragraphe ne mettrait pas le texte dans le registre correct à coller plus tard).

Ajoutez ce qui suit à votre vimrc

 noremap dd "Ddd "Appends the contents of the current line into register d noremap p "dp:let @d="" "Pastes from register d and then clears it out 

si vous ne voulez pas coller pour effacer le contenu du registre

 noremap p "dp "Paste from register d 

mais cela entraînera la croissance de ce registre sans jamais l’effacer