He habilitado la corrección (no lo llamaría autocorrección específicamente debido a este problema) en zsh habilitando setopt correct
en mi .zshrc
.
Ahora, cuando escribo dtae
en una terminal, obtengo:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
En este punto, me gustaría que zsh recuerde mi decisión. Entonces, la próxima vez que escriba dtae
, debería corregirse automáticamente a date
[1]. Sin embargo, esto no sucede, y zsh nuevamente me pregunta qué hacer:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] A menos, por supuesto, si en ese momento existe un dtae
comando o alias real .
Actualizar:
He logrado modificar el código fuente de zsh (archivo utils.c
, función spckword
) para crear un archivo personalizado que contiene los alias creados automáticamente con la invocación de la funcionalidad "correcta" de 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);
}
Al ejecutar dtae
, la siguiente línea se agrega al archivo ~/.zsh_correct_aliases
:
alias dtae='date'
Sin embargo, no sé cómo obtener el ~/.zsh_correct_aliases
archivo recién modificado en el lugar.
dtae
genera o simplemente deshabilitarla temporalmente?dtae
exista, luego restablecido si / cuandodtae
ya no está definido.command_not_found_handler
pero en tiempo de análisis en lugar de tiempo de ejecución), y luego implementar la lógica en el código zsh.Respuestas:
Puede basar su código en el alias incorporado definido aquí
(no probado)
Y agregue
source ~/.zsh_correct_aliases
a usted .zshrcEDITAR : probado con fuente:
Da:
fuente
Podría definir una función precmd que genere ~ / .zsh_correct_aliases.
fuente