Você pode experimentar um dos plugins de alinhamento no vim.org. Eu uso o mais popular do Dr. Campbell: link
Apesar disso, sim, você pode chamar funções Vim de um comando substituto, mas a desvantagem é que o padrão de substituição inteiro tem que ser uma expressão. Veja " :help sub-replace-expression
" e " :help submatch()
". Por exemplo, se quiséssemos substituir um padrão correspondente por uma contagem de letras:
:%s/pattern/\=len(submatch(0))/g
Assim, sua ideia de usar o printf () funcionaria:
:%s/\(.*\) \(.*\)/\=printf('%-7s %-7s',submatch(1),submatch(2))/