!!
é expansão do histórico . O primeiro !
inicia uma expansão de histórico; !!
tem o designador de evento que significa o comando anterior.
Você pode acessar o histórico de comandos por meio do fc
e history
incorporados e através do history
variável.
Como --vimgrep
só faz sentido com ag
, seu alias seria mais útil se aplicado ao último comando ag
. Você pode localizar o comando anterior ag
da seguinte forma:
${${(M)history:#ag *}[1]}
Além disso, você precisará injetar --vimgrep
no comando.
alias edit-last='vim -q<(eval "${${(M)history:#ag *}[1]} --vimgrep")'
O último comando ag
não fará mais sentido se você tiver alterado o diretório atual. Isso é difícil de detectar. Você pode querer colocar na lista de permissões comandos aceitáveis. Este não é um teste perfeito, claro.
edit-last () {
local cmd
setopt local_options extended_glob
for cmd in $history; do
case $cmd in
((ls|(cvs|git|hg|svn) status)(| *)) :;;
("ag "*) vim -q<(eval "$cmd --vimgrep"); return;;
(edit-last) :;;
(*) echo >&2 "The previous ag command is too old."; return 125;;
esac
done
}