Eu habilitei a correção (eu não chamaria de autocorreção especificamente por causa desse problema) no zsh ativando setopt correct
no meu .zshrc
.
Agora, quando digito dtae
um terminal, recebo:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
Neste ponto, eu gostaria que o zsh se lembrasse da minha decisão. Então, da próxima vez que eu digitar, dtae
ele deve corrigir automaticamente para date
[1]. No entanto, isso não acontece, e o zsh está novamente me perguntando o que fazer:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] A menos que, é claro, se nesse momento exista um dtae
comando ou apelido real .
Atualizar:
Eu consegui modificar o código-fonte zsh (arquivo utils.c
, função spckword
) para criar um arquivo personalizado contendo os aliases criados automaticamente com a invocação da funcionalidade "correta" do zsh:
original:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
modificado:
if (x == 'y' || x == ' ' || x == '\t')
{
char *aliaspath = getenv("HOME");
strcat(aliaspath, "/.zsh_correct_aliases");
FILE *out = fopen(aliaspath, "ab+");
fprintf(out, "alias %s=\'", *s);
*s = dupstring(best);
fprintf(out, "%s\'\n", *s);
fclose(out);
if (hist)
hwrep(best);
}
Na execução dtae
, a seguinte linha é adicionada ao arquivo ~/.zsh_correct_aliases
:
alias dtae='date'
No entanto, não sei como obter o ~/.zsh_correct_aliases
arquivo recém-modificado no local.
dtae
surgir ou apenas desativada temporariamente?dtae
existir, depois restabelecido se / quandodtae
não estiver mais definido.command_not_found_handler
mas em tempo de análise em vez de tempo de execução) e, em seguida, implementar a lógica no código zsh.Respostas:
Você pode basear seu código no alias interno definido aqui
(não testado)
E adicione
source ~/.zsh_correct_aliases
a você .zshrcEDIT : testado com fonte:
Dá:
fonte
Você pode definir uma função precmd que origine ~ / .zsh_correct_aliases.
fonte