114 votes

Mot de remplacer VIM avec le contenu du tampon de la pâte ?

J’ai besoin de faire un tas de remplacement de mot dans un fichier et voulez le faire avec une commande de vi, pas une commande EX tel que . Je sais que c’est la manière typique, on remplace le mot à la position actuelle du curseur : mais y a-t-il un moyen de le faire avec le contenu du registre sans nom comme texte de remplacement et sans écraser le registre ?

133voto

Jefromi Points 127932

Je suis en train de penser par "coller" vous voulez dire que le sans nom (yank/mettre/modifier/supprimer/remplacer) inscrire, à droite? (Puisque c'est celui que j'avais d'être écrasés par la commande de modification.)

Les registres sont généralement spécifié en tapant " alors le nom (un seul caractère) du registre, comme "ay alors "ap tirer dans le registre a, puis mettre le contenu du registre a. En va de même pour une commande de changement. Dans ce cas, si vous ne voulez pas que le texte que vous supprimer avec la commande de modification pour aller n'importe où, vous pouvez utiliser le trou noir du registre "_: "_cw". Puis, une fois en mode insertion, vous pouvez taper ctrl-R suivie par le registre que vous voulez (probablement ") pour les mettre dans le contenu de ce registre.

  • "* - registre de sélection (bouton du milieu de coller)
  • "+ - presse-papiers registre (probablement également accessibles avec les touches ctrl-shift-v via le terminal)
  • "" - vim par défaut (sans nom) copier/ajouter/modifier/supprimer/remplacer registre.

Réponse courte: "_cw^R"

Edit: comme d'autres sont ce qui suggère, vous pouvez bien sûr utiliser un autre registre pour le tirer (ou autre) que vous avez votre texte par défaut dans le registre. Vous ne pense pas toujours que la première, bien que, de sorte qu'il est agréable de faire une seule commande de changement sans souffler loin. Bien qu'il ne soit pas totalement époustouflé. Il y a les registres numérotés "0 par "9:

Vim remplit ces registres avec le texte de copier et supprimer des commandes.

Numéroté inscrire 0 contient le texte le plus récent à l'aide de la commande yank, à moins que la commande spécifié un autre registre avec [x].

Numéroté registre 1 contient le texte supprimé par la plus récente de supprimer ou de modifier la commande, à moins que la commande spécifiée d'un autre registre ou le texte est moins d'une ligne (le petit supprimer registre est utilisé à l'époque). Une exception est faite pour l'opérateur delete avec ces commandes de déplacement: %, (, ), `, /, ?, n, N, { et }. Inscrire "1 est toujours utilisé ensuite (c'est Vi compatible). Le registre est utilisé en tant que bien si la suppression est à l'intérieur d'une ligne.

À chaque phase de la suppression ou de la modification, Vim déplace le contenu du registre 1 dans le registre 2, 2 en 3, et ainsi de suite, la perte de la précédente contenu du registre 9.

49voto

ostler.c Points 709

En utilisant les informations dans ce post, j’ai formé ce mappage utile. J’ai choisi « cp » car il signifie « changer la pâte »

``

EDIT :

J’ai aussi pris cela un peu plus loin et prise en charge de tout mouvement.

Pour obtenir l’équivalent de la commande ci-dessus, il serait `` pour « parole de pâte de changement »

31voto

Ste Points 141

Vous pouvez utiliser le mode visuel de vim pour cela. par exemple copier un mot : puis écraser un autre avec le mot copié :

24voto

tnorthcutt Points 6657

Si votre curseur est sur le mot que vous voulez remplacer par le contenu du registre sans nom, vous pouvez utiliser viwp. v des commutateurs de mode visuel, iw sélectionne la parole intérieure, et p met le contenu du registre à sa place.

Dans la pratique, quand j'ai besoin de remplacer un mot (nom de la fonction, etc.) avec un autre, je vais passer de l'un à utiliser comme un remplacement, yiw arracher à la parole intérieure pour le registre sans nom, puis passer à la parole, je suis remplaçant, et viwp pour le remplacer. Assez rapide voie de la substitution d'un mot pour un autre. Si vous avez effectué une recherche (/) pour le mot que vous êtes en remplacement pour l'obtenir, vous pouvez ensuite il suffit de frapper n pour aller à l'occurrence suivante, vous devez le remplacer. Évidemment pas de substitut à l'aide d' :%s/find/replace/g, mais pour un couple de rapide des substitutions, il peut être pratique, surtout si vous avez déjà le nouveau mot dans un registre.

6voto

Daniel Vandersluis Points 30498

Si vous faites usage d’un registre nommé (c’est à dire. utiliser ou , etc., pour remplir votre registre de pâte), vous pouvez faire quelque chose comme

``

Qui remplacera le mot avec le contenu du Registre . Autant que je sache, vous ne pouvez pas utiliser le registre par défaut parce que quand vous il va être rempli avec le mot qui a été coupé par cette commande.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X