Я включил исправление (я бы не назвал это автокоррекцией именно из-за этой проблемы) в 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появляется или временно отключается?