This is an aspell
problem; not a vim
problem. aspell
itself has these deficiencies. You need simply to add the missing ordinal numbers to the dictionary.
$ echo "1st 21st 31st 5th 25th 35th" | aspell -a
@(#) International Ispell Version 3.1.20 (but really Aspell 0.60.7-20110707)
*
*
*
& th 50 15: Th, Thu, the, tho, thy, THC, Rh, HT, ht, H, T, h, t, nth, Ch, OH, TA, Ta, Te, Ti, Tu, Ty, ah, ch, eh, oh, pH, sh, ta, ti, to, uh, DH, NH, TB, TD, TM, TN, TV, TX, Tb, Tc, Tl, Tm, tb, tn, tr, ts, Th's, T's
& th 50 20: Th, Thu, the, tho, thy, THC, Rh, HT, ht, H, T, h, t, nth, Ch, OH, TA, Ta, Te, Ti, Tu, Ty, ah, ch, eh, oh, pH, sh, ta, ti, to, uh, DH, NH, TB, TD, TM, TN, TV, TX, Tb, Tc, Tl, Tm, tb, tn, tr, ts, Th's, T's
& th 50 25: Th, Thu, the, tho, thy, THC, Rh, HT, ht, H, T, h, t, nth, Ch, OH, TA, Ta, Te, Ti, Tu, Ty, ah, ch, eh, oh, pH, sh, ta, ti, to, uh, DH, NH, TB, TD, TM, TN, TV, TX, Tb, Tc, Tl, Tm, tb, tn, tr, ts, Th's, T's
31st
and31nd
are treated equally. – B Layer Nov 2 '18 at 7:45