Se você olhar para :help :normal
, encontrará
This command cannot be followed by another command, since any '|' is considered part of the command.
Observe também que |
não é um canal. É apenas uma maneira de "concatenar" comandos. É como separar dois comandos do shell com ;
. Por esse motivo, o intervalo aplicado a um comando não é transferido para comandos subsequentes.
A alternativa mais próxima que eu posso pensar em não envolver uma função personalizada ou algo assim é usar :substitute
e re-especificar o intervalo:
:'<,'>s/#/\t\t\t#/ | '<,'> !sort -f