Talvez algo como:
accept-line() {
if [[ ${BUFFER//![\$!]} = *!* ]]; then
set -o histverify
else
set +o histverify
fi
zle .$WIDGET
}
zle -N accept-line
adicionado ao seu ~/.zshrc como uma heurística. Ou seja, redefina o widget accept-line (invocado quando você pressiona Enter ) para que defina a opção histverify apenas se houver um ! seguido por um caractere diferente de ! e $ na linha atual.
Isso engana as linhas de comando como echo '!e' !! ou \!!rm , mas parece que deve ser uma limitação aceitável.
Pessoalmente, eu adiciono set +o banghist ao meu ~/.zshrc e prefiro confiar em history-search-backward (ligado em Alt + p por padrão no modo emacs ) ou history-beginning-search-backward (que eu vinculo em PageUp ) que economiza um pouco de digitação e sempre me dá um feedback visual antes de aceitar o comando.