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.

Kazark
la source

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)
Kristo
la source
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.


la source
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

Eric Bock
la source
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.

Jason Down
la source
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.

Michael Krelin - pirate
la source