J'ai activé la correction (je n'appellerais pas cela la correction automatique en raison de ce problème) dans zsh en activant setopt correct
dans mon .zshrc
.
Maintenant, quand je tape dtae
dans un terminal, j'obtiens:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
À ce stade, je voudrais que zsh se souvienne de ma décision. Donc, la prochaine fois que je tape, dtae
il devrait automatiquement se corriger en date
[1]. Cependant, cela ne se produit pas, et zsh me demande à nouveau quoi faire:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] Sauf, bien sûr, s'il existe à ce moment-là une dtae
commande ou un alias réel .
Mise à jour:
J'ai réussi à modifier le code source zsh (fichier utils.c
, fonction spckword
) pour créer un fichier personnalisé contenant les alias créés automatiquement avec l'invocation de la fonctionnalité "correcte" de zsh:
original:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
modifié:
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);
}
Lors de l'exécution dtae
, la ligne suivante est ajoutée au fichier ~/.zsh_correct_aliases
:
alias dtae='date'
Cependant, je ne sais pas comment trouver le ~/.zsh_correct_aliases
fichier nouvellement modifié sur place.
dtae
apparition ou simplement désactivée temporairement?dtae
existe, puis rétabli si / quanddtae
n'est plus défini.command_not_found_handler
mais au moment de l'analyse au lieu de l'exécution), puis d'implémenter la logique dans le code zsh.Réponses:
Vous pouvez baser votre code sur l'alias intégré défini ici
(pas testé)
Et ajoutez
source ~/.zsh_correct_aliases
à vous .zshrcEDIT : testé avec la source:
Il donne:
la source
Vous pouvez définir une fonction precmd qui source ~ / .zsh_correct_aliases.
la source