Comment remplacer un seul mot sous le curseur?

144

Comment remplacer un mot sous le curseur dans Vim.

Donc, au lieu d'utiliser dwalors ile mot et ensuite Esc, existe-t-il une combinaison plus simple pour remplacer le mot sous le curseur?

dire
la source

Réponses:

251
ciw

(changer le mot intérieur) changera le mot entier sous le curseur. Comparer avec

cw

qui changera uniquement le mot de la position actuelle du curseur . Pour plus d'informations, consultez cette question / réponse SO .

Brian Agnew
la source
Comment gérer la situation si le mot contient des points ou des barres obliques (par exemple /usr/bin/bashou 1222.333)? Cela ressemble à vim interprète /et .comme fin du mot et ne sélectionne pas la chaîne entière.
Alexander Cska
85

J'ai souvent envie de remplacer un mot par un autre que j'ai extrait d'ailleurs. Le problème avec les autres solutions est que si vous essayez de changer un mot, alors votre prochaine pâte sera être ce mot que vous avez supprimé avec cw.

Essayez ce qui suit:

1 "This first word should overwrite the second"

yiw     yank inner word (copy word under cursor, say "first").
...     Move the cursor to another word (say "second").
viwp    select "second", then replace it with "first". 

J'espère que c'est ce que vous cherchiez.

Éthéré
la source
7
Cela fonctionne bien mais seulement si le remplacement doit être fait once. Si je dois remplacer le couple du second' by premier (dans votre exemple), le mot copié devient secondaprès le premier remplacement.
ViFI
32

ciw

c   change
iw  inner word

Cela supprimera le mot sous le curseur (même si le curseur est quelque part au milieu du mot) et entrera en mode insertion.


Voir également la documentation de Vim pour référence:

:help c
:help text-objects
Xophmeister
la source
17

Si vous voulez changer un mot avec un mot précédemment retiré, il existe une autre solution pour viwp(une fois que vous avez extrait le premier mot).

ciwsupprime le mot précédent et vous met en mode insertion là où il se trouvait. Mais alors vous pouvez utiliser ctrl+r, 0pour insérer le contenu du registre 0 (qui contient le mot précédemment copié).

Alors:

yiw
[move to next word]
ciw
ctrl+r
0

Cela fonctionne mieux que viwpparce qu'après la première utilisation, vous pouvez effectuer le remplacement à plusieurs reprises avec .. Il ne passe pas non plus en mode visuel et ne s'affiche pas brièvement.

Connor
la source
1
Pas sûr de ce que tu veux dire que ça ne change pas de mode, l'inverse semble être le cas, mais c'est peut-être ce que tu voulais, rester en mode insertion. Mais un gros avantage est que cela (contrairement à viwp) peut être fait plusieurs fois avec un seul tirage. Merci!
Palo
Oh tu as raison, je pensais passer en mode visuel, édité. Je n'avais pas réalisé que c'était une limitation de viwp- même .pas la duplication.
Connor
3
C'est de loin la meilleure solution lorsque nous avons déjà retiré le mot de remplacement.
mljrg
1
Voilà la réponse! La possibilité d'utiliser .avec c'est génial!
izzy
1

Essayez cw- comme dans «changer le mot».

Utilisez http://linuxmoz.com/vi-commands-cheat-sheet/ ou tout autre aide-mémoire comme référence.

Kosma Dunikowski
la source
1
Cela fonctionne, mais cela ne modifiera que les caractères à droite du curseur
Brian Agnew