Isso acontece porque seu primeiro grupo de captura inclui os espaços.
^\([^#]*\)\(#.*\)
| -------- -------- the comment
begin |
everything upto #
including spaces
Para corrigir isso, você deseja deixar os espaços fora do grupo de captura, assim:
^\(.\{-}\)\s*\(#.*\)
| ------ -- ------ comment
begin | \____ any amount of whitespace
non-greedy match
Isso tornaria seu comando completo:
%s/^\(.\{-}\)\s*\(#.*\)/\r /gc