Every command that uses the minibuffer once is recorded on a special history list, the command history, together with the values of its arguments, so that you can repeat the entire command. In particular, every use of M-x is recorded there, since M-x uses the minibuffer to read the command name.
C-x <ESC> <ESC> re-executes a recent command that used the minibuffer. With no argument, it repeats the last such command. A numeric argument specifies which command to repeat; 1 means the last one, 2 the previous, and so on.
C-x <ESC> <ESC> works by turning the previous command into a Lisp expression and then entering a minibuffer initialized with the text for that expression. Even if you don't know Lisp, it will probably be obvious which command is displayed for repetition. If you type just <RET>, that repeats the command unchanged. You can also change the command by editing the Lisp expression before you execute it. The executed command is added to the front of the command history unless it is identical to the most recent item.
Once inside the minibuffer for C-x <ESC> <ESC>, you can use the usual minibuffer history commands (see Minibuffer History) to move through the history list. After finding the desired previous command, you can edit its expression as usual and then execute it by typing <RET>.
Incremental search does not, strictly speaking, use the minibuffer.
Therefore, although it behaves like a complex command, it normally
does not appear in the history list for C-x <ESC> <ESC>.
You can make incremental search commands appear in the history by
isearch-resume-in-command-history to a non-
value. See Incremental Search.
The list of previous minibuffer-using commands is stored as a Lisp
list in the variable
command-history. Each element is a Lisp
expression that describes one command and its arguments. Lisp programs
can re-execute a command by calling
eval with the