There are so many aspects to Vim that defining any subset of skills is fairly arbitrary but here is a first stab at it.
You can consider yourself a proficient VIM user if you can :-
# 1: write a simple substitute
:%s/fred/joe/gic
# 2: write a substitute using memory
:'a,'bs/\<fred\>/& &/
# 3: Combine global with substitute (only do the substitute on lines containing fred)
:'a,'bg/fred/s/dick/joe/igc
# 4: Use a recording for small and big repetitive edits
# a simple recording 'q' to change character under cursor to aa equals, then descend a line
qqr=jq
repeat the recording q 55 times
55@q
# 5: Use registers. be happy using registers to store information for later use
# store current line to register a
"ayy
#store a block to the paste register
"*y}
# customising vim with maps and abbreviations
# 6: write a map to create a temporary composite command
# or permanent if stored in .vimrc
# eg insert date into a file
:inoremap \zd <C-R>=strftime("%d%b%y")<CR>
# eg read a text file
:map <f8> :r c:/aaa/x.txt
# 7: Use abbreviations
# eg spit out a PHP snippet
:iab phpif if ($a=='2')<CR>{<CR>}<CR>else<CR>{<CR>}<CR>
