What happens after Tab depends on completion scripts. This answer makes me believe the desired behavior was there for at least one user in 2013, but in 2019 the behavior in my Debian 9 is like you described; possibly the scripts/behavior have changed since.
Besides, Bash chooses a script according to the command typed (first word in the current line). It's not immediately obvious that any single change can affect all completions to provide what you want (I guess the
_filedir function is a good start).
Fortunately you can get possible expansions on demand. From
man 1 bash (under the
The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching filenames for possible completions.
The word before point is treated as a pattern for pathname expansion, and the list of matching filenames is inserted, replacing the word. If a numeric argument is supplied, an asterisk is appended before pathname expansion.
The list of expansions that would have been generated by
glob-expand-word is displayed, and the line is redrawn. If a numeric argument is supplied, an asterisk is appended before pathname expansion.
C-x * and
C-x g describe default key bindings. In a more friendly format these are:
- Meta+g (Alt+g) for
- Ctrl+x, (release Ctrl) * for
glob-expand-word (note: * is in fact Shift+8 on my keyboard),
- Ctrl+x, (release Ctrl) g for
The following code sets these bindings (in case they are missing for whatever reason):
for the current shell only:
# commands to run in Bash
bind '"\eg": glob-complete-word'
bind '"\C-x*": glob-expand-word'
bind '"\C-xg": glob-list-expansions'
or in your permanent config (
# lines to add
(note this will only affect new shells, unless you reload).
You will be interested in
glob-list-expansions. Main differences:
glob-complete-word always appends an asterisk, while
glob-list-expansions does this conditionally (see the cited manual).
- If there are many matches then you may need to trigger
glob-complete-word twice (i.e. press the key combination twice) before it prints something; this depends on
show-all-if-ambiguous, compare the already mentioned answer.
- If there is just one match then
glob-complete-word will perform an actual line completion, while
glob-list-expansions will still just display the match.
In your particular case type this:
then Ctrl+x, g.