J'ai un peu de texte dans mon tampon de copie, par exemple, j'ai fait un yw
mot (yank mot) et maintenant j'ai «foo» dans mon tampon.
Je passe maintenant au mot "barre" et je souhaite le remplacer par mon tampon de collage.
Pour remplacer le texte manuellement, je pourrais le faire cw
puis taper le nouveau mot.
Comment puis-je modifier le mot mais utiliser le contenu de mon tampon de collage au lieu de saisir manuellement le mot de remplacement?
La meilleure option que j’ai à l’heure est d’aller au début du mot que je veux remplacer et de le faire dw
(supprimer le mot), puis de vous rendre à l’autre endroit et de faire le yw
(mot sec), puis de revenir à la zone de remplacement et de p
(pâte) qui est un peu maladroit surtout si elles ne sont pas sur le même écran.
vep
.ve"0p
travaillerait pour vous permettre de répéter votre changementmap <C-j> ciw<C-r>0<ESC>
pour que peu importe d'où vient le mot que vous appuyez^j
.:help insert
recherchez ensuite CTRL-R/CTRL-R
. Pour savoir comment çave"0p
marche, regardez:help registers
yw
pour tirer votre mot, puis déplacez le curseur sur le mot que vous souhaitez remplacer et utilisez-le"_dw
pour le supprimer, en envoyant le texte au registre nul (pour ne pas écraser le contenu du"
registre, où le texte coupé / coupé passe par défaut) ), puis simplement coller avecp
.Vous pouvez utiliser le mappage suivant pour rendre les choses un peu plus faciles:
... donc en mode normal, vous pouvez utiliser
\dw
pour supprimer un mot sans affecter le"
registre.la source
Pour faire cela de la manière VIM, vous utilisez intentionnellement les registres yank, delete et autres.
Register
"0
est le registre de yank. Tout ce que vous tirez sera mis ici, mais ne supprime jamais le registre"0
.Donc, dans votre exemple, vous venez de tirer un mot. Pour remplacer un mot par ce que vous venez de tirer, vous tirez parti des suppressions ne touchant jamais le registre des coups perdus. Alors déplacez-vous vers le mot cible, supprimez-le avec
dw
, puis collez-le dans votre registre yank"0p
, ou mieux encore,cw
ensuite^R0
(qui est répétable).Le registre des petites suppressions se trouve juste en face du registre de yank
"-
. Toute petite suppression ou suppression de modification est mise ici, mais les tirets ne se touchent jamais"-
. Une suppression compte comme petite si elle est inférieure à une ligne complète.Registres
"1
-"9
sont les registres d’historique des suppressions. Avec"1
contenant la dernière suppression importante ou suppression de modification, et"9
contenant la suppression la plus ancienne ou importante de modification la plus ancienne. Seuls les suppressions qui ne sont pas petites, c'est-à-dire les suppressions d'une ligne ou plus, sont poussées sur"1
-"9
.Pour toute opération qui modifie un registre, une copie est également toujours placée dans le registre par défaut, également appelé registre non nommé
""
. C'est le registre utilisé lorsque vous ne nommez pas explicitement un registre.Register
"_
est le registre des trous noirs et il est toujours vide. Si vous le supprimez, aucun registre n’est modifié, pas même le""
registre par défaut , ni le registre des trous noirs lui-même. Le texte supprimé est complètement disparu, en dehors de votre historique d'annulation. Tirer ou coller du registre des trous noirs ne fait essentiellement rien.Le registre des trous noirs
"_
vous permet de faire des choses comme une première petite suppression, puis un certain nombre d'autres suppressions"_
sans changer votre registre de petites suppressions"-
, puis de coller votre première petite suppression.Les autres registres sont le dernier registre inséré
".
, les registres de nom de fichier"%
et"#
le registre de commandes, le registre de":
recherche"/
et le registre d'expression"=
.Vous pouvez obtenir une liste de tous ces registres et de leur contenu à l'aide de la commande
:register
. Cette commande est très utile pour expérimenter et apprendre ce qui finit où.la source
J'en ai besoin si souvent, j'ai écrit un plugin pour simplifier et permettre une vitesse maximale: ReplaceWithRegister .
Ce plugin propose une commande deux en un
gr
qui remplace le texte couvert par un objet {motion} / text, des lignes entières ou la sélection en cours par le contenu d'un registre; l'ancien texte est supprimé dans le registre des trous noirs, c'est-à-dire qu'il a disparu. Il gère de manière transparente de nombreux cas d'angle et permet une répétition rapide via la.
commande standard . Si ça ne vous plait pas, sa page contient des liens vers des alternatives.la source
Pour répéter le collage, utilisez la commande de changement.
cw ^R0ESC (^ R = Contrôle + R; 0 pour le registre 0)
remplacera le mot avec le contenu de reg. 0 et vous permet de répéter avec.
C'est génial pour cgn(VIM 7.4) de remplacer les modèles de recherche:
la source
Comme il n'est pas encore inclus, vous remplacez généralement les chaînes
:%s/.../.../
par des mots et vous pouvez également le faire avec le mot situé sous votre curseur.:s/find/
<ctrl-r>
et choisissez avec le curseur le mot avec lequel vous souhaitez le remplacer.<ctrl-w>
(petit "mot") ou<ctrl-a>
(gros "mot) pour coller le mot sous le curseur dans la ligne de commandeVoir le lien sur l'utilisation des éléments de curseur dans la ligne de commande .
la source
J'utilise habituellement ceci: ywpour tirer
foo
, puis supprimerbar
avec dw, et comme dernière étape, mettrefoo
dans le registre0
qui contient le texte arrêté avec "0p. Répétez la mise avec un point ( .) si nécessaire.En outre, au lieu de ywet dw, vous pouvez utiliser yiwet diw(remarquez le supplément i- cela signifie à l' intérieur ). Cela vous permet d’effacer ou de supprimer un mot de n’importe quel endroit à l’ intérieur de celui-ci, pas seulement au début du mot.
la source
J'utilise ce plugin pour élargir la région de sélection: https://github.com/terryma/vim-expand-region
Donc, ma combinaison pour changer un mot sera:
vvp
à n'importe quel endroit d'un mot.J'ai aussi un hack pour sauvegarder le contenu du registre sans nom après la coller afin de pouvoir le répéter.
(mon presse-papiers est autoselect)
la source
J'utilise le mappage de clé ci-dessous pour remplacer le mot actuel par le mot copié.
" replace with Register 0
map <leader>rr ciw<C-r>0<Esc>
yiwcopier un mot. Accédez à un mot. ,rrremplace le mot.
La clé du leader est map to ,.
la source
,rw
Cela aurait plus de sens, et sur QWERTY, il est probablement plus facile et rapide de déconner. Sur DVORAK, j’ai choisi,rc
, qui bien que cela n’ait pas beaucoup de sens, c’est plus facile et plus rapide que tous. Sur DVORAK,,rw
est un spectacle d'horreur;)Tout d’abord, naviguez jusqu’au début du mot que vous voulez extraire. Si vous êtes au milieu du mot, il suffit
b
de revenir au début. Ensuite, faitesye
glisser le mot entier, sans espacesy
finaux ( repère / fine
). Pour finir, allez au mot que vous voulez remplacer - peut-êtrew
plusieurs fois - etvep
entrez lev
mode de sélection isuel, sélectionnez le nome
du mot etp
le contenu qui a été retiré pour la dernière fois.(Si quelqu'un veut savoir pourquoi je ne me suis pas contenté de commenter la réponse acceptée, pour une petite modification,
ye
plutôt que d'utiliseryw
, c'est que ma réputation sur cette pile est encore trop basse.)la source
yw
pour tirer le monde, allez dans le monde que vous voulez changer.v
pour sélectionner le mondeve
ouvw
selon votre situation.p
pour coller le monde que vous avez copié pour remplacer le bloc sélectionnéla source
Ajouter à l'autre de meilleures réponses. Un peu trop évident mais vous pouvez simplement coller avant de supprimer. "yw" puis allez le mot que vous voulez remplacer, "pldw" (coller, déplacer un caractère à droite, supprimer le mot.
la source