Perhatikan bahwa Ctrl-Alt-E di bash
tidak 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-E
sini, 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 pwd
atas) dan tidak memperluas foo
alias.
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 bash
MCE, 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 a
perluas alias di bawah kursor (dengan asumsi Anda menggunakan sistem penyelesaian).