Notez que Ctrl-Alt-E dans bash
ne développe pas seulement les alias. Il développe également les variables, la substitution de commandes (!), La substitution de processus (!), L'expansion arithmétique et supprime les guillemets (il ne fait pas de génération de nom de fichier (globbing) ou d'expansion de tilde).
Il ne parvient pas toujours à étendre les alias. Donc, même s'il a ses utilisations, il est important de réaliser que son résultat change potentiellement la signification de la ligne de commande, a des effets secondaires et est potentiellement dangereux.
Par exemple dans:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
Si j'appuie M-C-E
ici, cela me donne:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
Ce qui me donne une ligne de commande complètement différente (et imaginez ce qui se serait passé si j'avais eu rm -rf *
au lieu de pwd
ci - dessus) et ne développe pas l' foo
alias.
Avec zsh
, pour s'appuyer sur la note de Gilles sur les alias développés à l'intérieur des fonctions, vous pourriez faire:
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
Cela ne développera les alias que si la ligne de commande actuelle est syntaxiquement valide (elle se double donc d'un vérificateur de syntaxe).
Contrairement à bash
MCE, il résout également complètement les alias. Par exemple, si vous avez:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
Sera étendu à:
$ ls --color -l
Notez qu'il canonise également la syntaxe pour des choses comme:
$ for i (*) cmd $i; foo
sera changé en:
$ for i in *
do
cmd $i
done
foo
C-x a
développe l'alias sous le curseur (en supposant que vous utilisez le système de complétion).