Veja esta dica no wiki vim
de como ter o recuo correto mesmo para linhas vazias. Se você quer apenas manter o recuo anterior (ignorando o vim
calculado como o recuo correto) use let ind = indent(prevnonblank(v:lnum - 1))
como explicado em um comentário na mesma entrada do wiki.