Skip to content

Chapter 9: Registers and Clipboard

In the previous chapters we mentioned the "Vim clipboard" over and over — for example, dd stores the deleted content into the clipboard, and yy stores the copied content into the clipboard. But have you ever run into this awkward situation: you yy to copy a line, then casually x to delete a few characters, and when you p to paste, what comes out is the characters you just deleted, not the line!

The root cause is that Vim's "clipboard" is actually more than one — it has a whole set of Registers. Once you understand registers, you truly gain control over copy and paste.

Viewing registers

  • :reg or :registers view the contents of all registers
  • :reg a view only the content of register a

Run :reg first to take a look. You'll see a long list of registers starting with ". We'll go through them by category below.

The unnamed register

"" is the unnamed register, i.e. what we usually call the "default clipboard". Every delete (d, x), change (c), or yank (y) that doesn't specify a register writes here, and p / P paste from here by default.

This explains the awkward moment above: after yy you did x, x overwrote the unnamed register, so p naturally pasted what x deleted.

Named registers

"a through "z are 26 named registers. You can manually decide where content goes and where it comes from, without interfering with each other.

  • "ayy copy the current line into register a
  • "ap paste from register a
  • "add delete the current line and store it into register a

Using an uppercase letter appends instead of overwriting:

  • "Ayy append the current line to the existing content of register a

Tips: Back to the problem at the start — as long as you "ayy that line into a first, you can x as much as you want in between, and finally "ap pastes it back safely.

The yank register

"0 is the dedicated yank register. It holds only the content of the most recent y, and is never polluted by d or x.

  • "0p paste the most recently yanked (not deleted) content

This is another way to solve the opening problem: after yy delete whatever you like, then use "0p to paste the copied line back.

Special registers

Vim also has a batch of automatically-maintained read-only/special registers:

  • "+ the system clipboard (shared with other programs, common on macOS/Linux)
  • "* the selection clipboard (X11 primary selection; on macOS basically the same as "+)
  • "% the current file name
  • ": the last command-line command
  • ". the last inserted text
  • "/ the last search pattern
  • "- the small delete register (deletes of less than one line)
  • "_ the black hole register, content written here is simply discarded (detailed below)

Note: Whether "+ is available depends on whether your Vim was compiled with the +clipboard feature. Check with :echo has('clipboard'); a return of 1 means it's supported.

The black hole register

"_ is very handy: when you want to delete something but not overwrite the current clipboard, use "_d.

  • "_dd delete the current line without affecting any register

Using registers in insert mode

In insert mode, press Ctrl-r followed by a register name to insert the register's content directly:

  • Ctrl-r a insert the content of register a
  • Ctrl-r " insert the unnamed register
  • Ctrl-r % insert the current file name

Practice register operations in the text below.

Line 1: use "ayy to copy me into register a
Line 2: use "byy to copy me into register b
Now randomly x a few characters to pollute the unnamed register
Below this line, paste with "ap and "bp separately — do they paste separately?
Also try: put the cursor on this line, "_dd to delete it, then p — is what pastes still the earlier x?

If your Vim supports the system clipboard, try "+yy to copy a line, then switch to a browser or another editor and Cmd/Ctrl-v to paste. Does it work?

Registers are the foundation of efficient copy-paste in Vim. Once you've got them, look back at the macros in Chapter 7: you'll see a macro is really just a sequence of operations recorded into a register — it all connects.

Next Chapter introduces marks and jumps.