Это можно сделать с :help :map-expr
отображений для всех строчных символов, которые проверяют предшествующий конец предложения. Если перед курсором есть завершающий предложение символ, он возвращает заглавный символ, в противном случае набранный строчный символ.
Вы можете использовать символ нижнего регистра после символа, заканчивающегося предложением, нажав клавишу Shift во время ввода символа. Т.е. в действительности регистр "переключается" на первую букву.
Я использую цикл для построения отдельных отображений:
for char in split('abcdefghijklmnopqrstuvwxyz', '\zs')
exe printf("inoremap <expr> %s search('[.!?]\\_s\\+\\%%#', 'bcnw') ? '%s' : '%s'", char, toupper(char), char)
endfor
for char in split('ABCDEFGHIJKLMNOPQRSTUVWXYZ', '\zs')
exe printf("inoremap <expr> %s search('[.!?]\\_s\\+\\%%#', 'bcnW') ? '%s' : '%s'", char, tolower(char), char)
endfor