How to replace a single word under cursor?
Asked Answered
P

6

211

How do I replace a word under the cursor in Vim.

So instead of using dw then i then the word and then Esc, is there a simpler combination to replace the word under the cursor?

Peebles answered 9/1, 2013 at 10:45 Comment(0)
U
366
ciw

(change inner word) will change the whole word under the cursor. Compare with

cw

which will only change the word from the current cursor position. For more info see this SO question/answer.

Unpaged answered 9/1, 2013 at 10:48 Comment(2)
How to deal with the situation if the word contains dots or slashes (e.g. /usr/bin/bash or 1222.333)? It looks like vim interprets / and . as end of the word and won't select the entire string.Metaphase
@AlexanderCska you might want to try cW or ciW (notice uppercase W)Schizogony
C
125

I often find myself wanting to replace one word with another that I have yanked from elsewhere. The problem with the other solutions is that if you attempt to change a word, then your next paste will be that word that you deleted with cw.

Try the following:

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". 

Hope that's what you were looking for.

Cassation answered 8/11, 2013 at 14:26 Comment(2)
It works nicely but only if replacement has to be done once. If i have to replace couple of second' by first` (in your example), copied word becomes second after the first replacement.Biddie
@ViFI, viw"0p instead of just viwp would help you if want to paste more than once. Basically, the same as viwp but with "0 before pasting, which won't overwrite the bufferPita
R
34

ciw

c   change
iw  inner word

This will delete the word under the cursor (even if the cursor is somewhere in the middle of the word) and enter insert mode.


Also see Vim's documentation for reference:

:help c
:help text-objects
Riffraff answered 9/1, 2013 at 10:48 Comment(0)
M
24

If you want to change a word with a previously yanked word, there's another solution to viwp (once you have yanked the first word).

ciw removes the previous word and puts you in insert mode where it was. But then you can use ctrl+r, 0 to insert the contents of register 0 (which contain the previously yanked word).

So:

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

This works better than viwp because after the first usage you can then repeatedly perform the replacement with .. It also doesn't switch into visual mode and highlight briefly.

Moule answered 26/6, 2018 at 17:34 Comment(4)
Not sure what you mean that it does not change modes, opposite seems to be the case, but maybe that's what you wanted, to remain in insert mode. But a big advantage is that this (contrary to viwp) can be done several times with just one yanking. Thanks!Eigenfunction
Oh you're right, I was thinking of going into visual mode, edited. I didn't realize that was a limitation of viwp - even . doesn't duplicate it.Moule
This is by far the best solution when we already have yanked the replacement word.Tootle
This is the answer! Ability to use . with this is great!Guria
I
1

To copy word under cursor press: bvey

To replace the word under cursor press: bvep

Individualist answered 1/4, 2021 at 19:5 Comment(3)
If you need to replace several times, search and replace with confirmation: :%s!first!second!gcPeta
would be nice to provide a description of what each of those doDemonography
definitely has a smoother flow than cwSuckle
S
0

Try cw - as in 'change word'.

Use http://linuxmoz.com/vi-commands-cheat-sheet/ or any other cheat sheet as a reference.

Standpoint answered 9/1, 2013 at 10:51 Comment(2)
That works, but it will only amend the characters to the right of the cursorUnpaged
This solution was already proposedDemonography

© 2022 - 2024 — McMap. All rights reserved.