29.3 Controlling Abbrev Expansion
When Abbrev mode is enabled, an abbrev expands whenever it is
present in the buffer just before point and you type a self-inserting
whitespace or punctuation character ( SPC
, comma, etc.). More
precisely, any character that is not a word constituent expands an
abbrev, and any word-constituent character can be part of an abbrev.
The most common way to use an abbrev is to insert it and then insert a
punctuation or whitespace character to expand it.
Abbrev expansion preserves case: ‘ foo
’ expands to ‘ find outer otter
’, and ‘ Foo
’ to ‘ Find outer otter
’. ‘ FOO
’
expands to ‘ Find Outer Otter
’ by default, but if you change the
variable abbrev-all-caps
to a non- nil
value, it expands
to ‘ FIND OUTER OTTER
’.
These commands are used to control abbrev expansion:
M-'
Separate a prefix from a following abbrev to be expanded
( abbrev-prefix-mark
).
C-x a e
¶
Expand the abbrev before point ( expand-abbrev
).
This is effective even when Abbrev mode is not enabled.
M-x unexpand-abbrev
¶
Undo the expansion of the last expanded abbrev.
M-x expand-region-abbrevs
Expand some or all abbrevs found in the region.
You may wish to expand an abbrev and attach a prefix to the expansion;
for example, if ‘ cnst
’ expands into ‘ construction
’, you might want
to use it to enter ‘ reconstruction
’. It does not work to type
recnst
, because that is not necessarily a defined abbrev. What
you can do is use the command M-'
( abbrev-prefix-mark
) in
between the prefix ‘ re
’ and the abbrev ‘ cnst
’. First, insert
‘ re
’. Then type M-'
; this inserts a hyphen in the buffer to
indicate that it has done its work. Then insert the abbrev ‘ cnst
’;
the buffer now contains ‘ re-cnst
’. Now insert a non-word character
to expand the abbrev ‘ cnst
’ into ‘ construction
’. This
expansion step also deletes the hyphen that indicated M-'
had been
used. The result is the desired ‘ reconstruction
’.
If you actually want the text of the abbrev in the buffer, rather than
its expansion, you can accomplish this by inserting the following
punctuation with C-q
. Thus, foo C-q ,
leaves ‘ foo,
’ in
the buffer, not expanding it.
If you expand an abbrev by mistake, you can undo the expansion by
typing C-/
( undo
). See Undo. This undoes the
insertion of the abbrev expansion and brings back the abbrev text. If
the result you want is the terminating non-word character plus the
unexpanded abbrev, you must reinsert the terminating character,
quoting it with C-q
. You can also use the command M-x unexpand-abbrev
to cancel the last expansion without deleting the
terminating character.
M-x expand-region-abbrevs
searches through the region for defined
abbrevs, and for each one found offers to replace it with its expansion.
This command is useful if you have typed in text using abbrevs but forgot
to turn on Abbrev mode first. It may also be useful together with a
special set of abbrev definitions for making several global replacements at
once. This command is effective even if Abbrev mode is not enabled.
The function expand-abbrev
performs the expansion by calling
the function that abbrev-expand-function
specifies. By
changing this function you can make arbitrary changes to
the abbrev expansion. See Abbrev Expansion in The Emacs Lisp
Reference Manual.