29.7 Dynamic Abbrev Expansion
The abbrev facility described above operates automatically as you insert text, but all abbrevs must be defined explicitly. By contrast, dynamic abbrevs allow the meanings of abbreviations to be determined automatically from the contents of the buffer, but dynamic abbrev expansion happens only when you request it explicitly.
M-/
Expand the word in the buffer before point as a dynamic abbrev,
by searching for words starting with that abbreviation
( dabbrev-expand
).
C-M-/
Complete the word before point as a dynamic abbrev
( dabbrev-completion
).
For example, if the buffer contains ‘ does this follow
’ and you
type f o M-/
, the effect is to insert ‘ follow
’ because that
is the last word in the buffer that starts with ‘ fo
’. A numeric
argument to M-/
says to take the second, third, etc. distinct
expansion found looking backward from point. Repeating M-/
searches for an alternative expansion by looking farther back. After
scanning all the text before point, it searches the text after point.
The variable dabbrev-limit
, if non- nil
, specifies how far
away in the buffer to search for an expansion.
After scanning the current buffer, M-/
normally searches other
buffers. The variables dabbrev-check-all-buffers
and
dabbrev-check-other-buffers
can be used to determine which
other buffers, if any, are searched.
For finer control over which buffers to scan, customize the
variables dabbrev-ignored-buffer-names
and
dabbrev-ignored-buffer-regexps
. The value of the former is a
list of buffer names to skip. The value of the latter is a list of
regular expressions; if a buffer’s name matches any of these regular
expressions, dynamic abbrev expansion skips that buffer.
A negative argument to M-/
, as in C-u - M-/
, says to
search first for expansions after point, then other buffers, and
consider expansions before point only as a last resort. If you repeat
the M-/
to look for another expansion, do not specify an
argument. Repeating M-/
cycles through all the expansions after
point and then the expansions before point.
After you have expanded a dynamic abbrev, you can copy additional
words that follow the expansion in its original context. Simply type
SPC M-/
for each additional word you want to copy. The
spacing and punctuation between words is copied along with the words.
You can control the way M-/
determines the word to expand and
how to expand it, see Customizing Dynamic Abbreviation.
The command C-M-/
( dabbrev-completion
) performs
completion of a dynamic abbrev. Instead of trying the possible
expansions one by one, it finds all of them, then inserts the text
that they have in common. If they have nothing in common, C-M-/
displays a list of completions, from which you can select a choice in
the usual manner. See Completion.
Dynamic abbrev expansion is completely independent of Abbrev mode; the
expansion of a word with M-/
is completely independent of whether
it has a definition as an ordinary abbrev.