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