Any way to delete in vim without overwriting your last yank? [duplicate] – Dev

The best answers to the question “Any way to delete in vim without overwriting your last yank? [duplicate]” in the category Dev.

QUESTION:

I love vim, but one common gotcha is:

  • yank a line
  • go to where you would like to paste it
  • delete what’s there
  • paste your yank, only to discover that it pastes what you just deleted

Obviously the workflow is delete first, yank second. But it would be reeeeeaaaaaalllly nice if I didn’t have to. Anyone have a trick for this? Does vim have a paste buffer that works well, or is there a .vimrc setting I can change?

ANSWER:

Your yanked line should still be in the register 0. So do

"0p

to paste the line (and delete whenever you want)

ANSWER:

Pass to the _ register, the black hole.

To delete a line without sticking it in the registers:

"_dd

See also :help registers.

It’s probably safest, if you want to paste something over and over again, to yank it into a “named” register.

"aY

Yanks a line into the a register. Paste it with "ap.

ANSWER:

another possibility is:

yank your lines like you would do normally

go to where you want to paste them, enter visual line mode (V)

select the lines you want to replace

hit p to paste your lines.

this also has the added benefit, that the buffer is “swapped” with the replaced contents

ANSWER:

All yank and delete operations write to the unnamed register by default. However, the most recent yank and most recent delete are always stored (separately) in the numbered registers. The register 0 holds the most recent yank. The registers 1-9 hold the 9 most recent deletes (with 1 being the most recent).

In other words, a delete overwrites the most recent yank in the unnamed register, but it’s still there in the 0 register. The blackhole-register trick ("_dd) mentioned in the other answers works because it prevents overwriting the unnamed register, but it’s not necessary.

You reference a register using double quotes, so pasting the most recently yanked text can be done like this:

"0p

This is an excellent reference:

  • http://blog.sanctum.geek.nz/advanced-vim-registers/