M-x hippie-expand is a single command providing a variety of completions and expansions. Called repeatedly, it tries all possible completions in succession.
Which ones to try, and in which order, is determined by the contents of
the customizable option
customization of the expansion behavior can be made by changing the
order of, removing, or inserting new functions in this list. Given a
positive numeric argument, M-x hippie-expand jumps directly that
number of functions forward in this list. Given some other argument (a
negative argument or just C-u) it undoes the tried completion.
See the commentary in hippie-exp.el for more information on the possibilities.
Typically you would bind
hippie-expand to M-/ with
dabbrev-expand, the standard binding of M-/, providing one
of the expansion possibilities.