Copiez, supprimez, puis collez dans Vim


15

Je viens de commencer avec Vim hier et j'ai du mal à comprendre le copier-coller. Je comprends que pour copier j'entre en mode visuel, surligne puis tire. Je passe ensuite à la ligne sur laquelle je souhaite coller, mais le plus souvent, je n'ai pas besoin de supprimer du texte de cette ligne. Je fais cela en utilisant xou dw. Il en résulte alors que ma copie originale est écrasée (au fur xet à mesure qu'elle dwsemble être coupée). Comment puis-je contourner cela?

Pour le mettre en exemple

$foo = $this->foo->property;
thislineuses($foo);

Donc, avec le code ci-dessus que je copie $this->foo->property, je voudrais alors passer à la ligne 2, supprimer $fooet coller. Le problème est que lorsque je supprime $foode la ligne 2, c'est ce qui est collé au lieu de $this->foo->property.

Réponses:


16

Jetez un oeil à :h copy-move. Le coup sec ou la suppression par défaut va dans un endroit appelé un registre (un registre nommé "). Si vous devez supprimer du texte avant de le coller, vous devez éviter d'écraser le registre x, comme vous l'avez découvert. Heureusement, vous pouvez utiliser n'importe quelle autre lettre ou chiffre pour nommer un registre différent.

  • "ayy(tirer une ligne dans le registre a)
  • x, ddEtc. (supprimer du texte dans le registre sans nom, ")
  • "ap(collez le texte du registre a)

9

Si le problème est que vous avez simplement besoin de remplacer certains textpar certains text2, alors, mettez simplement en surbrillance et tirez text2. Mettez ensuite en surbrillance textet appuyez sur pou Ppour coller text2à la place de text.

Un autre guide rapide pour certaines commandes vim courantes est http://www.catswhocode.com/blog/100-vim-commands-every-programmer-should-know

Prendre plaisir!

Modifier: notez que pcolle du texte après le curseur et Pavant le curseur.


c'est bien parce que vous n'avez pas à penser à des registres intermédiaires pour yank. ça marche juste.
Jon Schoning

7

Vous pouvez copier dans un registre nommé "ayw, faire votre suppression puis coller à partir du registre nommé "ap.

Cependant, il est généralement plus facile de simplement changer l'ordre dans lequel vous effectuez les choses. Faites le collage puis la suppression, ou supprimez puis le copier / coller.

Alternativement, vous pouvez supprimer dans le registre des trous noirs "_d. Voir /programming//q/54255/70863


3

Vous avez différents registres que vous pouvez utiliser pour contenir différentes valeurs de texte. Si vous souhaitez enregistrer du texte dans un registre différent de celui où le texte supprimé ira (c'est-à-dire à partir de xou d w), utilisez ce qui suit:

Pour enregistrer du texte dans le registre a:

  • appuyez sur " a[commande yank et mouvement] (enregistre le texte dans le registre a)
  • allez à l'endroit où vous voulez coller le texte
  • appuyez sur " a p(collez le texte du registre a)

Vous pouvez utiliser un registre pour chacune des lettres du clavier et chaque chiffre. La suppression de texte n'utilisera pas ces registres, donc le texte restera dans le registre jusqu'à ce que vous mettiez fin à votre session ou que vous y mettiez autre chose manuellement.


0

Vous n'avez pas à mettre en surbrillance toute la ligne si vous utilisez v(par opposition au V) mode visuel. Si c'est ce que vous demandez.

Si vous parlez de modifier du texte copié, vous devez d'abord copier et effacer les parties.

Et si vous souhaitez copier, puis modifier l'original puis coller, vous pouvez ensuite accéder à un autre registre. Comme "2y, puis modifiez, puis allez ailleurs et "2p.

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.