Você não pode expandir o histórico antes do alias ou da expansão de parâmetros.
Pessoalmente, eu odeio a expansão do histórico e é a primeira coisa que desabilito.
Aqui, em vez de fazer o alias de uma expansão de histórico, sugerimos a criação de um widget que aumente um número E<n>
restante do cursor:
increment-episode() {
emulate -L zsh
setopt extendedglob
LBUFFER=${LBUFFER/(#b)(*E)(<->)/$match[1]${(l:${#match[2]}::0:)$((match[2]+1))}}
}
zle -N increment-episode
bindkey '\e+' increment-episode
E então, você apenas pressiona Acima e depois Alt + + e você tem um feedback visual do que está acontecendo em cada estágio e pode desfazer / refazer / adaptar à vontade, e não trabalhar cegamente como na expansão do histórico do csh (um recurso dos anos 70 que a IMO fazia sentido, mas não tanto agora que temos terminais e editores de linha mais rápidos e mais capazes). p>
Mas se você realmente quisesse avaliar cegamente o código no comando anterior no histórico com o número após E
incrementado, você poderia:
rerun-with-next-episode() {
emulate -L zsh
setopt extendedglob
local new
new=${${history:0:1}/(#b)E(<->)/E${(l:${#match[1]}::0:)$((match[1]+1))}}
# display it
print -ru2 -- $new
# put it on the history
print -rs -- $new
# evaluate it
eval -- $new
}