A concrete example may help here. If you type M-x a u
<TAB>, the <TAB> looks for alternatives (in this case,
command names) that start with ‘au’. There are several,
autoconf-mode, but they all
auto, so the ‘au’ in the minibuffer completes
If you type <TAB> again immediately, it cannot determine the next character; it could be ‘-’, ‘a’, or ‘c’. So it does not add any characters; instead, <TAB> displays a list of all possible completions in another window.
Next, type - f. The minibuffer now contains ‘auto-f’,
and the only command name that starts with this is
auto-fill-mode. If you now type <TAB>, completion fills in
the rest of the argument ‘auto-fill-mode’ into the minibuffer.
You have been able to enter ‘auto-fill-mode’ by typing just
a u <TAB> - f <TAB>.