Posso alias `!`no bashrc?

Posso alias `!`no bashrc?

Eu uso o emacs como editor na linha de comando (alias de alias em='emacs -nw') e gostaria de poder criar um alias para !emabrir o arquivo aberto mais recentemente no emacs.

Eu tentei alias e='!em',,,, alias e='${!}em'mas alias e='${!em}'até agora não consigo encontrar nada que funcione.

Encontrei algumas postagens relacionadas sobre alias !!:

alias para um comando usando !! para recuperar o último comando

Responder1

Não acho que a expansão do histórico seja feita após a expansão dos aliases, então você precisaria usar history -ppara fazer isso explicitamente:

alias e='eval "$(history -p !em)"'

Embora isso também não funcione neste caso, já que os aliases não são expandidos após a substituição do comando. Mas as funções funcionam, então estas duas deveriam funcionar:

em() { emacs -nw "$@"; }
e() { eval "$(history -p !em)"; }

Este último pode ser um apelido.

Responder2

Se você usar o alias como descrito, não deverá tentar criar um alias adicional para !em. ! invoca o mecanismo de histórico do shell, portanto, o comando "!em" repetirá o uso mais recente do seu alias (que pode não ser o último arquivo realmente editado pelo emacs, no entanto).

informação relacionada