O caractere ! no modo de comando vi faz com que o vi use o aplicativo externo sort para ordenar as linhas.
Seu primeiro comando :1,$sort faz com que vi use seu mecanismo interno de classificação. Em seu segundo comando :1,$!sort todas as linhas são obtidas e fornecidas como entrada padrão para o aplicativo sort .
Apenas tente este comando vi : :!ls -la . Você verá a saída de ls e, depois de pressionar Enter , voltará para vi . Esse mecanismo geralmente é (por exemplo) compilar o código escrito em vi sem fechar e reabrir o arquivo.
Então, você vê, usar ! nesse caso causa mecanismos diferentes. O utilitário ubuntu sort pode ordenar diferente do vi interno.