Respuestas:
De esa manera, printf
espera que un número decimal se convierta en hexadecimal. Todo lo que necesita hacer es convertir el carácter a un número de la siguiente manera:
s/\([a-z]\)/\=printf("%#02x", char2nr(submatch(0)))/
Ver :help char2nr()
para más detalles.