8

Assume I have the text Fnord yanked before and that my cursor resides on the B of the line:

M:mock(Baz)

How can I change the text inside () with the previously yanked text?

Currently, I often make the mistake by doing:

  • di( aka "delete inside ()"
  • SHIFT+P

yet which leaves me with the exact text again, as the deleted text will be moved to the register.

I want to have:

M:mock(Fnord)
5
  • 2
    Possible duplicate of How to replace a word with a yanked word in normal mode
    – Rich
    Jan 20, 2016 at 16:52
  • 1
    @Rich The provided question covers the more general case of replacing a yanked word. I think this question is a bit more specific and does not attract the same answers.
    – k0pernikus
    Jan 20, 2016 at 17:30
  • Protip: The 0 register will contain the last yanked text. :h quote0 Jan 20, 2016 at 20:54
  • 1
    The same idea from the mentioned question's accepted answer can be applied here. With the cursor in the parentheses, simply press vi)p. It is the same as in that answer, just with the i) text object instead of the w text object, Jan 21, 2016 at 2:10
  • 1
    @k0pernikus I'm afraid we'll have to agree to disagree on that one. To me, the important part of both questions is the replacement, and not the text object used to apply it.
    – Rich
    Jan 21, 2016 at 11:17

4 Answers 4

14

You can use visual selection to select the text to replace, and then paste over it as follows:

vi(p

vi( selects Baz (because it is enclosed in parenthesis), p pastes Fnord over it.

However, this will yank Baz to the register after the paste, which might not be what you want.

10

Unless you specify a register, p (or P) will use the last register that was filled. The unnamed register "" contains the most recently yanked or deleted text (unless another register was specified, e.g. with "ay), but these also go into "0 for yanks or "1 for deletes/changes. See registers.

If the last text was yanked with y you can paste it from the 0 register with "0P. If it was deleted, you could access it with the 2 register with "2P ("1 is now Baz).

Alternatively you could avoid messing with your registers and delete to the blackhole register "_:

"_di(P
3

If installing plugins is an option, you could use yankstack.vim. Then you could retain you current workflow:

Currently, I often make the mistake by doing:

  • di( aka "delete inside ()"
  • SHIFT+P
  • Alt+p - cycle to the previous yank
1

Assuming "Fnord" is in register a you can do (with the cursor at the beginning of the line) f(ci(<c-r>a

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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