Я ввімкнув виправлення (я би не назвав це автокорекцією спеціально через цю проблему) в zsh, включивши setopt correctв моєму.zshrc .
Тепер, коли я набираю dtaeтермінал, я отримую:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
У цей момент я хотів би zsh запам'ятати своє рішення. Тож наступного разу, коли я dtaeйого ввожу, він повинен автоматично виправитись date[1]. Однак цього не відбувається, і zsh знову запитує мене, що робити:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] Якщо, звичайно, якщо на той час існує фактична dtaeкоманда чи псевдонім.
Оновлення:
Мені вдалося змінити вихідний код zsh (файл utils.c, функцію spckword), щоб створити власний файл, що містить псевдоніми, автоматично створені з викликом "правильної" функціональності zsh:
оригінал:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
змінено:
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);
}
Після виконання dtaeу файл додається наступний рядок ~/.zsh_correct_aliases:
alias dtae='date'
Однак я не знаю, як створити джерело щойно зміненого ~/.zsh_correct_aliasesфайлу на місці.
dtaeіснує, потім відновлюється, якщо / коли dtaeбільше не визначено.
command_not_found_handlerале в час розбору замість виконання), а потім реалізувати логіку в коді zsh.
dtaeнерестовина існує або просто тимчасово відключена?