I don't know what's the best way to manage over 500 abbreviations. Maybe in the long term, as @statox explained, you could have a look at snippets to reduce this number.
And if you want to auto-complete abbreviations, you could try the following code:
augroup GetAbbrev
autocmd!
autocmd VimEnter * let s:abbrev_list = [] |
\ call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(s:abbrev_list, submatch(1))', 'gn')
augroup END
set completefunc=CompleteAbbrev
function! CompleteAbbrev(findstart, base)
if a:findstart
return searchpos('\<\k', 'bcnW', line('.'))[1] - 1
else
return filter(copy(s:abbrev_list), 'v:val =~ "^" . a:base')
endif
endfunction
To use it, you would have to hit C-x C-u after the beginning of an abbreviation.
The autocmd sets up the variable s:abbrev_list which should contain all your abbreviations.
The function CompleteAbbrev() should return a list of candidates based on the word before the cursor.
The 'completefunc' option's value tells Vim which function to call when you hit C-x C-u.
Note that the option is local to the buffer, so you could still use other functions in different kind of buffers, using an autocmd and the FileType event for example.
See :h complete-functions for more info on how the function works.
Another solution would be to use synonyms completion. From :h i_^x^t:
*i_CTRL-X_CTRL-T*
CTRL-X CTRL-T Works as CTRL-X CTRL-K, but in a special way. It uses
the 'thesaurus' option instead of 'dictionary'. If a
match is found in the thesaurus file, all the
remaining words on the same line are included as
matches, even though they don't complete the word.
Thus a word can be completely replaced.
For an example, imagine the 'thesaurus' file has a
line like this:
angry furious mad enraged
Placing the cursor after the letters "ang" and typing
CTRL-X CTRL-T would complete the word "angry";
subsequent presses would change the word to "furious",
"mad" etc.
Other uses include translation between two languages,
or grouping API functions by keyword.
To use this solution, you would have to do 3 things:
- Write the
{lhs} of all your abbreviations inside a dedicated file.
For example, /home/user/mysynonyms.txt. And group them around similar themes.
Add the path to this file to the option 'thesaurus':
set thesaurus+=/home/user/mysynonyms.txt
Hit C-x C-t after the beginning of the name of any abbreviation inside a group.
For example, suppose you have the following abbreviations:
iab cfa CFuncA
iab cfb CFuncB
iab cfc CFuncC
iab jfa JavaFuncA
iab jfb JavaFuncB
iab jfc JavaFuncC
iab pfa PhpFuncA
iab pfb PhpFuncB
iab pfc PhpFuncC
You could group them according to the programming language they belong to.
Inside /home/user/mysynonyms.txt, you would write:
cpp cfa cfb cfc
php pfa pfb pfc
java jfa jfb jfc
Now, whenever you hit C-x C-t after the name of an abbreviation (or just its beginning), Vim should display, in the popup menu, all the abbreviations which are on the same line.
Here's how it would look:

Note that the abbreviations don't need to begin with the same characters to be grouped, they could be entirely different. As long as they're on the same line in your synonyms file, Vim will show all of them.
And you don't have to use the programming language to decide in which group put an abbreviation. You could group them according to any meaningful similarity/topic/category you have in mind.
So, when you forget a specific abbreviation, you could type the first letters of a category, hit C-x C-t and choose the relevant one inside the menu.
Edit:
To dump all your abbreviations inside /home/user/mysynonyms.txt, you could use these 3 Ex commands:
:let abbrev_list = []
:call substitute(join(readfile($MYVIMRC), "\n"), '\v%(^|\n)\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}(\k+)', '\=add(abbrev_list, submatch(1))', 'gn')
:call writefile(abbrev_list, '/home/user/mysynonyms.txt')
Edit2:
I've added the flag n when the substitute() function is called because you don't need any substitution. Its only purpose is to add an abbreviation inside a list whenever one is found.
But because you have many abbreviations, it could make the process uselessly slow, I don't know. Initially, I didn't put it because I don't know which Vim version you're using. If your version is newer than 7.3.627, it should be ok, otherwise you would have to remove the n flag.
\vi?abbr\s+(\k+)? Could you give me a link with an excerpt of your abbreviations, to see if I can reproduce your issue? – user9433424 May 12 '16 at 19:12nflag to the substitute call (I've edited the answer to include it). If you do a search in yourvimrcand you copy-paste this\v^\s*i?%(nore)?ab%[brev]\s+%(%(\<expr\>|\<buffer\>)\s+){,2}\zs\k+, does it highlight your abbreviations? – user9433424 May 12 '16 at 19:26