8.5 Minibuffer History
Everything you type in the minibuffer is saved in a minibuffer history list so you can easily use it again later. This includes completion candidates (such as file names, buffer names, command names, etc.) and any other kind of minibuffer input. You can use the following commands to quickly fetch an earlier or alternative response into the minibuffer:
M-p
Move to the previous item in the minibuffer history, an earlier
argument ( previous-history-element
).
M-n
Move to the next item in the minibuffer history
( next-history-element
).
UP``DOWN
Like M-p
and M-n
, but move to the previous or next line of
a multi-line item before going to the previous history item
( previous-line-or-history-element
and
next-line-or-history-element
) .
M-r regexp RET
Move to an earlier item in the minibuffer history that
matches regexp ( previous-matching-history-element
).
M-s regexp RET
Move to a later item in the minibuffer history that matches
regexp ( next-matching-history-element
).
While in the minibuffer, M-p
( previous-history-element
)
moves through the minibuffer history list, one item at a time. Each
M-p
fetches an earlier item from the history list into the
minibuffer, replacing its existing contents. Typing M-n
( next-history-element
) moves through the minibuffer history
list in the opposite direction, fetching later entries into the
minibuffer.
If you type M-n
in the minibuffer when there are no later
entries in the minibuffer history (e.g., if you haven’t previously
typed M-p
), Emacs tries fetching from a list of default
arguments: values that you are likely to enter. You can think of this
as moving through the “future history”.
The “future history” for file names includes several possible
alternatives you may find useful, such as the file name or the URL at
point in the current buffer. The defaults put into the “future
history” in this case are controlled by the functions mentioned in
the value of the option file-name-at-point-functions
. By
default, its value invokes the ffap
package (see Finding Files and URLs at Point),
which tries to guess the default file or URL from the text around
point. To disable this guessing, customize the option to a nil
value, then the “future history” of file names will include only the
file, if any, visited by the current buffer, and the default
directory.
The arrow keys UP
and DOWN
work like
M-p
and M-n
, but if the current history item is longer
than a single line, they allow you to move to the previous or next
line of the current history item before going to the previous or next
history item.
If you edit the text inserted by the M-p
or M-n
minibuffer history commands, this does not change its entry in the
history list. However, the edited argument does go at the end of the
history list when you submit it.
You can use M-r
( previous-matching-history-element
) to
search through older elements in the history list, and M-s
( next-matching-history-element
) to search through newer
entries. Each of these commands asks for a regular expression
as an argument, and fetches the first matching entry into the
minibuffer. See Syntax of Regular Expressions, for an explanation of regular
expressions. A numeric prefix argument n means to fetch the
nth matching entry. These commands are unusual, in that they
use the minibuffer to read the regular expression argument, even
though they are invoked from the minibuffer. An upper-case letter in
the regular expression makes the search case-sensitive (see Lax Matching During Searching).
You can also search through the history using an incremental search. See Searching the Minibuffer.
Emacs keeps separate history lists for several different kinds of
arguments. For example, there is a list for file names, used by all
the commands that read file names. Other history lists include buffer
names, command names (used by M-x
), and command arguments (used
by commands like query-replace
).
The variable history-length
specifies the maximum length of a
minibuffer history list; adding a new element deletes the oldest
element if the list gets too long. If the value is t
, there is
no maximum length.
The variable history-delete-duplicates
specifies whether to
delete duplicates in history. If it is non- nil
, adding a new
element deletes from the list all other elements that are equal to it.
The default is nil
.