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.