Making Use of Buffers
You have seen that while you are editing, your last
x) or yank (
y) is saved in a buffer (a place in stored
memory). You can access the contents of that buffer and put the saved
text back in your file with the put command (
The last nine deletions are stored by vi in numbered buffers. You can access any
of these numbered buffers to restore any (or all) of the last nine
deletions. (Small deletions, of only parts of lines, are not saved in
numbered buffers, however. These deletions can be recovered only by
P command immediately after you’ve made the
vi also allows you to place yanks (copied text) into buffers identified by letters. You can fill up to 26 (a–z) buffers with yanked text and restore that text with a put command at any time in your editing session.
Being able to delete large blocks of text in a single bound is all very well and good, but what if you mistakenly delete 53 lines that you need? You can recover any of your past nine deletions, for they are saved in numbered buffers. The last delete is saved in buffer 1, the second-to-last in buffer 2, and so on.
To recover a deletion, type
" (double quote), identify the buffered
text by number, then give the put command. To recover your
second-to-last deletion from buffer 2, type:
The deletion in buffer 2 is placed after the cursor.
If you’re not sure which buffer contains the deletion
you want to restore, you don’t have to keep typing
p over and over again. If you use the repeat command (
u, it automatically increments the buffer
number. As a result, you can search through the numbered buffers
to put the contents of each succeeding buffer in the file one
after the other. Each time you type
u, the restored text is removed; when you
type a dot (.), the contents of the next buffer
is restored to your file. Keep typing
u and . until you’ve recovered the text
you’re looking for.
Yanking to Named Buffers
You have seen that you must put (
the contents of the unnamed buffer before you make any other edit,
or the buffer will be overwritten. You can also use
with a set of 26 named buffers (a–z) that are specifically available
for copying and moving text. If you name a buffer to store the
yanked text, you can retrieve the contents of the named buffer at
any time during your editing session.
To yank into a named buffer, precede the yank command
with a double quote (
") and the
character for the name of the buffer you want to load. For
"dyyYank current line into buffer
d. "a7yyYank next seven lines into buffer
After loading the named buffers and moving to the new
P to put the text back:
"dPPut the contents of buffer
dbefore cursor. "apPut the contents of buffer
There is no way to put part of a buffer into the text—it is all or nothing.
In the next chapter, you’ll learn how to edit multiple files. Once you know how to travel between files without leaving vi, you can use named buffers to selectively transfer text between files. When using the multiple-window feature of the various clones, you can also use the unnamed buffer to transfer data between files.
You can also delete text into named buffers using much the same procedure:
"a5ddDelete five lines into buffer
If you specify a buffer name with a capital letter, your yanked or deleted text will be appended to the current contents of that buffer. This allows you to be selective in what you move or copy. For example:
Delete from cursor to end of current sentence and save in buffer
Move two sentences further on.
Add the next sentence to buffer
z. You can continue adding more text to a named buffer for as long as you like, but be warned: if you forget once, and yank or delete to the buffer without specifying its name in capitalized form, you’ll overwrite the buffer, losing whatever you had accumulated in it.
Get Learning the vi and Vim Editors, 7th Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.