VIM Remplacez le mot avec le contenu de la mémoire tampon de collage?
J'ai besoin de faire un tas de parole des remplacements dans un fichier et que vous souhaitez faire avec une commande de vi, pas une commande EX comme :%s///g
. Je sais que c'est typique de la façon on remplace le mot à la position actuelle du curseur: cw<text><esc>
mais est-il un moyen de le faire avec le contenu du registre sans nom que le texte de remplacement et sans écraser le registre?
- RÉSOLUTION: Pour mon besoin immédiat, j'ai utilisé
12yl
arracher à 12 caractères et"_cw^r0
un mot à remplacer. J'ai ensuite été en mesure d'utiliser le.
commande de répéter le remplacement dans le fichier.
Vous devez vous connecter pour publier un commentaire.
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.)
Registres sont généralement spécifié en tapant
"
alors le nom (un seul caractère) du registre, comme"ay
puis"ap
à tirer dans le registrea
, puis mettre le contenu du registrea
. 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 s'inscrire"_
:"_cw
. Puis, une fois en mode insertion, vous pouvez taper ctrl-R suivie par le registre que vous voulez (probablement"
) à 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
::help registers
.En utilisant les informations dans ce post, j'ai formé ce utile de cartographie. J'ai choisi 'cp', car il signifie "changement coller"
nmap <silent> cp "_cw<C-R>"<Esc>
EDIT:
Aussi j'ai pris un peu plus loin et a appuyé la motion.
Pour obtenir l'équivalent de la commande ci-dessus, il serait
cpw
pour le "changement coller de word"nmap <silent> cp :let g:currentRegister=v:register<cr>:set opfunc=ChangePaste<CR>g@ function! ChangePaste(type, ...) silent exe "normal! `[v`]\"_c".getreg(g:currentRegister) endfunction
Vous pouvez utiliser le mode visuel de vim pour cela. par exemple, copier un mot:
ye
et puis écraser un autre avec le copié mot:vep
Si votre curseur est sur le mot que vous voulez remplacer par le contenu du registre sans nom, vous pouvez utiliser
viwp
.v
commutateurs de mode visuel,iw
sélectionne la parole intérieure, etp
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, etviwp
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 frappern
pour aller à l'occurrence suivante, vous devez le remplacer. Évidemment pas de substitut à l'aide de:%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 utilisez un nom de registre (ie. utilisation
"ay
ou"ad
, etc., pour remplir votre pâte registre), vous pouvez faire quelque chose commecw<CTRL-R>a<esc>
Qui permettra de remplacer le mot avec le contenu du registre
a
. Aussi loin que je peux dire, vous ne pouvez pas utiliser la valeur par défaut inscrire parce que quand vouscw
il sera rempli de la parole qui a été coupé par la commande.Entendez-vous le système de coller le tampon ou le vi s'inscrire?
Si vous souhaitez utiliser le système de coller le tampon, alors vous êtes beaux et pourrait faire
dw"+P
-"
choisit un registre, et"+
est le système de coller le tampon.Copier dans le non-par défaut s'inscrire à dire
"ay
à copier dans le registrea
puis à remplacer quelque chose nedw"aP
dw
supprime fuite des espaces après ce que je considère être la "parole", alors quecw
seules les modifications de la parole. Pour cette raison,dw
de ne pas travailler pour moi.de
devrait fonctionner pour vous, il va le supprimer à la fin de cette parole, alors quedw
va supprimer le début du mot suivant.Vous pouvez utiliser
yw
arracher à la parole, alors vous pouvez changer le mot avec arracha mot parvipw
tirer word et coller précédemment arracha mot.Vous pouvez utiliser les registres pour que:
premier lieu, le texte de remplacement dans un registre
<mark some text>"ay
où
a
est d'inscrire le nom devous pouvez ensuite utiliser ce registre, en remplacement
ve"ap
.
, qui est une autre chose que je voulais faire. Merci, bien. Très apprécié.Ou vous pourriez le faire Maj+v-p (sélectionner l'ensemble de la ligne et de le coller à la place)