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 ?
Réponses
Trop de publicités?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.
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 »
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.
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.