Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I use the highlight mode in vim to copy a few characters. I then want to paste more than once. My current technique does not work well.

Sample text: Linux Solaris Irix HP-UX

Suppose I want to copy the word Linux, then paste over Solaris and Irix.

  1. Place cursor at L in Linux
  2. Command v (for visual hilite), then e (for end-of-word), then y (for yank/copy)
  3. Now Linux is on my "vim clipboard"
  4. Move cursor to S in Solaris (first instance)
  5. Command v (for visual hilite), then e (for end-of-word), then p (for paste)
  6. Text is now: Linux Linux Irix HP-UX, but now Solaris is on my "vim clipboard"
  7. Move cursor to I in Irix (second instance)
  8. Command v (for visual hilite), then e (for end-of-word), then p (for paste)
  9. Text is now: Linux Linux Solaris HP-UX which is not what I expected.

I resort to using highlite/paste with the mouse (via X Terminal). Surely, I can do this better. How?

share|improve this question
add comment

4 Answers

I would do that in this way (really useful for many paste):

  1. Go somewhere into the word Linux, then "ayiw to copy the word
    • "a to select register «a»
    • y for copying
    • i to specify we are "in" (the word, the paragraph, ...)
    • w to choose the word
  2. Got to next word w (or somewhere into the word)
  3. Paste on time and save that as macro qbdiw"aPq
    • qb to start recording macro in register «b»
    • d for deleting
    • i to specify we are "in" (the word, the paragraph, ...)
    • w to choose the word
    • "a to select the register «a» (previously saved)
    • P to paste the word before the cursor
    • q to stop recording the macro
  4. Then to use the macro the first time, go to the next word w and press @b
  5. Finally, and it is where the advantage of this method can be seen, go the each word you want to replace and press @@

Hint: Replace the w by W in qbdiw"aPq to select word with punctuation, like HP-UX

Issue: When the word is the last in the line it will delete the space before the word.

share|improve this answer
add comment

Use registers and avoid visual mode.

Move to 'L' (type 0fL)                  |L|inux Solaris Irix HP-UX
"lye                                    
'Linux' is now in the 'l' register.     
Move to 'S' (type fS)                   Linux |S|olaris Irix HP-UX
"sde"lP                                 Linux Linu|x| Irix HP-UX
'Solaris' is now in the 's' register.   
Move to 'I' (type fI)                   Linux Linux |I|rix HP-UX
"ide"lP                                 Linux Linux Linu|x| HP-UX

You could also just delete 'Solaris ' and 'Irix ' and paste 'Linux ' twice in their place.

0fLw2dwbyf<space>w2P
share|improve this answer
add comment

I need this so often, I wrote a plugin to simplify and allow maximum speed: ReplaceWithRegister.

This plugin offers a two-in-one gr command that replaces text covered by a {motion} / text object, entire line(s) or the current selection with the contents of a register; the old text is deleted into the black-hole register, i.e. it's gone. It transparently handles many corner cases and allows for a quick repeat via the standard . command. Should you not like it, its page has links to alternatives.

share|improve this answer
add comment

You might want to consider "0p when pasting in visual mode.

Ref :help v_p

Move to L in Linux
ye     # Yank to end of word.
w      # Move to next word.
<C>ve  # Highlight Solaris.
"0p    # Paste Linux, Solaris ends up in unnamed register and Linux in 0
w      # Move to next word.
<C>ve  # Mark next word. (Or anywhere else)
"0p    # Paste Linux.

Or in this exact example one could also:

Positioned on L in Linux

yww<C>v2f 2p
# Or
yww<C>v2el2p
yw           # Yank Linux 
w            # Move to S in Solaris
<C>v2el      # Enter visual mode, highlight two * end, and l to consume space.
2p           # Paste Linux twice.

'<C>v2f '    # Alternative to <C>v2el
share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.