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.