14.3 Yanking Earlier Kills
To recover killed text that is no longer the most recent kill, use the
M-y command (
yank-pop). It takes the text previously
yanked and replaces it with the text from an earlier kill. So, to
recover the text of the next-to-the-last kill, first use C-y to
yank the last kill, and then use M-y to replace it with the
previous kill. M-y is allowed only after a C-y or another
You can understand M-y in terms of a “last yank” pointer which
points at an entry in the kill ring. Each time you kill, the “last
yank” pointer moves to the newly made entry at the front of the ring.
C-y yanks the entry which the “last yank” pointer points to.
M-y moves the “last yank” pointer to a different entry, and the
text in the buffer changes to match. Enough M-y commands can move
the pointer to any entry in the ring, so you can get any entry into the
buffer. Eventually the pointer reaches the end of the ring; the next
M-y loops back around to the first entry again.
M-y moves the “last yank” pointer around the ring, but it does
not change the order of the entries in the ring, which always runs from
the most recent kill at the front to the oldest one still remembered.
M-y can take a numeric argument, which tells it how many entries
to advance the “last yank” pointer by. A negative argument moves the
pointer toward the front of the ring; from the front of the ring, it
moves “around” to the last entry and continues forward from there.
Once the text you are looking for is brought into the buffer, you can
stop doing M-y commands and it will stay there. It's just a copy
of the kill ring entry, so editing it in the buffer does not change
what's in the ring. As long as no new killing is done, the “last
yank” pointer remains at the same place in the kill ring, so repeating
C-y will yank another copy of the same previous kill.
If you know how many M-y commands it would take to find the
text you want, you can yank that text in one step using C-y with
a numeric argument. C-y with an argument restores the text from
the specified kill ring entry, counting back from the most recent as
1. Thus, C-u 2 C-y gets the next-to-the-last block of killed
text—it is equivalent to C-y M-y. C-y with a numeric
argument starts counting from the “last yank” pointer, and sets the
“last yank” pointer to the entry that it yanks.
The length of the kill ring is controlled by the variable
kill-ring-max; no more than that many blocks of killed text are
The actual contents of the kill ring are stored in a variable named
kill-ring; you can view the entire contents of the kill ring with
the command C-h v kill-ring.