shr*_*hrx 26 zsh alias spell-checking autocorrection
我已经启用校正(我不会把它自动更正在zsh中通过启用特别是因为这个问题)setopt correct
我.zshrc
。
现在,当我输入dtae
终端时,我得到:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
Run Code Online (Sandbox Code Playgroud)
在这一点上,我希望 zsh 记住我的决定。所以下次我输入时dtae
它应该自动更正为date
[1]。但是,这并没有发生,zsh 再次询问我该怎么做:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
Run Code Online (Sandbox Code Playgroud)
[1] 当然,除非当时存在实际的dtae
命令或别名。
更新:
我设法修改了 zsh 源代码(文件utils.c
,函数spckword
)以创建一个自定义文件,其中包含通过调用 zsh 的“正确”功能自动创建的别名:
原来的:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
Run Code Online (Sandbox Code Playgroud)
修改的:
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);
}
Run Code Online (Sandbox Code Playgroud)
执行后dtae
,将以下行添加到文件中~/.zsh_correct_aliases
:
alias dtae='date'
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何~/.zsh_correct_aliases
就地获取新修改的文件。