Não tenho conhecimento de nada, mas veja a opção histverify
que altera o comportamento da expansão do histórico para que, quando você pressionar enter em uma linha que contenha operadores de histórico, a expansão seja executada no buffer do editor sem executar o comando.
$ setopt histverify $ echo !!Enter $ echo setopt histverifyEnter setopt histverify
Observe também que, em zsh
, como em csh
(onde a expansão do histórico vem no final dos anos 70), os modificadores de histórico (como :h
, :r
, :A
...) também podem ser aplicados a expansões de parâmetros ( $var:h
...).
E todo o histórico está acessível com a matriz associativa especial $history
.
As chaves dessas matrizes associativas são os números da história e, ao contrário das matrizes associativas regulares em que a ordem é indefinida, $history[@]
é classificado em ordem decrescente no valor numérico da chave.
Portanto, ${history:0:1}
é a última entrada do histórico. Portanto, você pode usar operadores de expansão de parâmetro para obter o mesmo resultado dos operadores de expansão de histórico. Por exemplo: !$:h
, poderia ser ${${(z)history:0:1}[-1]:h}