Perhatikan bahwa Ctrl-Alt-E di bashtidak hanya memperluas alias. Itu juga memperluas variabel, substitusi perintah (!), Substitusi proses (!), Memperluas aritmatika dan menghapus tanda kutip (itu tidak melakukan generasi nama file (globbing) atau ekspansi tilde).
Itu tidak selalu berhasil memperluas alias. Jadi, meskipun memiliki kegunaannya, penting untuk menyadari hasilnya berpotensi mengubah makna baris perintah, memiliki efek samping dan berpotensi berbahaya.
Misalnya di:
$ a=';w' b=1
$ alias foo=bar
$ b=2; echo $b $a; cd /tmp/dir && for i do foo $(pwd) <(ls); done
Jika saya menekan di M-C-Esini, itu memberi saya:
$ b=2; echo 1 ;w; cd /tmp/dir && for i do foo / /dev/fd/63; done
Yang memberi saya baris perintah yang sama sekali berbeda (dan bayangkan apa yang akan terjadi jika saya memiliki rm -rf *alih-alih di pwdatas) dan tidak memperluas fooalias.
Dengan zsh, untuk membangun catatan Gilles di alias yang diperluas di dalam fungsi, Anda bisa melakukan:
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
Itu akan memperluas alias hanya jika baris perintah saat ini secara sintaksis valid (sehingga berfungsi sebagai pemeriksa sintaksis).
Berlawanan dengan bashMCE, ia juga menyelesaikan alias sepenuhnya. Misalnya jika Anda memiliki:
$ alias ll='ls -l'; alias ls='ls --color'
$ ll
Akan diperluas ke:
$ ls --color -l
Perhatikan bahwa itu juga membuat kanon sintaksis sehingga hal-hal seperti:
$ for i (*) cmd $i; foo
akan diubah menjadi:
$ for i in *
do
cmd $i
done
foo
C-x aperluas alias di bawah kursor (dengan asumsi Anda menggunakan sistem penyelesaian).