From :h abbreviations
we can read:
There are three types of abbreviations:
full-id The "full-id" type consists entirely of keyword characters (letters
and characters from 'iskeyword' option). This is the most common
abbreviation.
Examples: "foo", "g3", "-1"
end-id The "end-id" type ends in a keyword character, but all the other
characters are not keyword characters.
Examples: "#i", "..f", "$/7"
non-id The "non-id" type ends in a non-keyword character, the other
characters may be of any type, excluding space and tab. {this type
is not supported by Vi}
Examples: "def#", "4/7$"
So it seems that the only solution is to add ;
to iskeyword
with set iskeyword+=;
, note that it might not be the best solution since it will change the behavior of a lot of other things (see :h 'iskeyword'
)
So personally I would recommend not to use abbreviations beginning with ;
or setting ;
as a part of iskeyword
but only on filetype-specific configurations.
Another solution is to create a "non-id" abbrev and simply add another ;
at the end of the left hand part like this:
iabbrev ;ph; 555123467
h
that detects its context. Alas, this approach is excessively intrusive and all abbreviations will then need to follow this schema -- see IMAP.vim with is (also) shipped with vim-latex. I remember this question has duplicates, possibly on SO.