Respostas:
Dessa forma, printf
espera que um número decimal seja convertido em um hexadecimal. Tudo o que você precisa fazer é converter o caractere em um número da seguinte maneira:
s/\([a-z]\)/\=printf("%#02x", char2nr(submatch(0)))/
Veja :help char2nr()
para detalhes.