Я ввімкнув виправлення (я би не назвав це автокорекцією спеціально через цю проблему) в 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
нерестовина існує або просто тимчасово відключена?