Isso seria complicado de implementar na fase de pesquisa inversa
alias g=grep
g foo /etc/passwd
alias g=git
g status
como a busca inversa precisaria saber que o alias havia mudado, informações que, ao contrário do exemplo acima, não estarão disponíveis se o alias for invisível (para a função de busca do histórico) alterado através de edição de arquivo de configuração e reinicialização do shell. / p>
Em vez disso, pode ser mais adequado (mas ainda um pouco complicado) gravar informações canônicas no histórico do shell, portanto, o histórico do shell acima seria expandido para git ou grep, dependendo do pseudônimo em favor no momento o comando foi executado. Desvantagem: você precisa gerenciar o histórico por conta própria e precisa procurar pelo nome do comando, não pelo alias:
function zshaddhistory() {
local -a cmd
local i
# split using shell parse, see zshexpn(1)
cmd=(${(z)1})
if (( $#cmd )); then
# alias expand or failing that the command
# NOTE zsh is 1-indexed, not 0-indexed
cmd[1]=${aliases[$cmd[1]]:-$cmd[1]}
for (( i = 2 ; i < $#cmd ; i++ )); do
# look for ; and try to alias expand word following
if [[ $cmd[$((i-1))] == \; ]]; then
cmd[$i]=${aliases[$cmd[$i]]:-$cmd[$i]}
fi
done
# (z) adds a trailing ; remove that
cmd[$#cmd]=()
# write to usual history location
print -sr -- $cmd
fi
# disable the usual history handling
return 1
}
alias g='echo wait for godot'
Com isso carregado:
% exec zsh -l
% ls
...
% uptime
...
% g ; g
wait for godot
wait for godot
% history
1 ls
2 uptime
3 echo wait for godot ; echo wait for godot
4 history
Isso não suporta aliases globais, que podem aparecer não apenas no início da linha ou após ;
. Este código pode ter outros descuidos.
Com mais código, você pode incluir o original como um comentário (provavelmente com a opção INTERACTIVE_COMMENTS
definida), embora isso possa exigir mais código no lado da pesquisa de histórico para talvez remover esses comentários:
...
# (z) adds a trailing ; remove that
cmd[$#cmd]=()
cmd+=(\# ${1%%$'\n'})
...
que, em algum momento, pode exigir que você reescreva todo o código de histórico e de busca de histórico para atender às suas necessidades específicas.