Tenga en cuenta que Ctrl-Alt-E bash
no solo expande los alias. También expande variables, sustitución de comandos (!), Sustitución de procesos (!), Expansión aritmética y elimina comillas (no genera generación de nombre de archivo (globbing) o expansión de tilde).
No siempre logra expandir los alias. Entonces, aunque tiene sus usos, es importante darse cuenta de que su resultado potencialmente cambia el significado de la línea de comando, tiene efectos secundarios y es potencialmente peligroso.
Por ejemplo en:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
Si presiono M-C-E
aquí, eso me da:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
Lo que me da una línea de comando completamente diferente (e imagina lo que hubiera pasado si hubiera tenido en rm -rf *
lugar de pwd
arriba) y no expande el foo
alias.
Con zsh
, para construir sobre la nota de Gilles sobre alias expandidos dentro de las funciones, puede hacer:
expand-aliases() {
unset 'functions[_expand-aliases]'
functions[_expand-aliases]=$BUFFER
(($+functions[_expand-aliases])) &&
BUFFER=${functions[_expand-aliases]#$'\t'} &&
CURSOR=$#BUFFER
}
zle -N expand-aliases
bindkey '\e^E' expand-aliases
Eso expandirá los alias solo si la línea de comando actual es sintácticamente válida (por lo que funciona como un verificador de sintaxis).
Contrariamente a bash
la MCE, también resuelve completamente los alias. Por ejemplo si tienes:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
Se ampliará a:
$ ls --color -l
Tenga en cuenta que también canoniza la sintaxis para que cosas como:
$ for i (*) cmd $i; foo
se cambiará a:
$ for i in *
do
cmd $i
done
foo
C-x a
expande el alias debajo del cursor (suponiendo que esté utilizando el sistema de finalización).