O problema é que você precisa citar os backticks em sua definição de alias. Aspas duplas ( " ) não citam a substituição do comando. Você precisará de aspas simples ( ' ). Use
alias via='vim 'ls -rt | tail -1''
Embora você realmente queira:
alias via='vim -- "$(ls -t | head -n 1)"'
Isto é:
- use a forma moderna de substituição de comando (
$(...)) enquanto estivermos nisso. - faça uma citação para desabilitar o operador split + glob (caso contrário, não funcionaria corretamente se o nome do arquivo tivesse caracteres IFS ou curingas (ainda não funciona se tiver caracteres de nova linha)).
- Use
--para marcar o final das opções paravim(caso contrário, não funcionaria para nomes de arquivos que começam com-ou+). - Use
ls -t | headem vez dels -rt | tailpara obter o resultado mais cedo.
Não use
alias via="vim 'ls -rt | tail -1'"
Se você fizer isso, a substituição do comando acontece quando você define o alias, não quando você o executa. Tente digitar alias via para ver que a saída não é realmente alias via='vim 'ls -rt | tail -1'' , mas sim alias via='vim <prematurely expanded output>' .