수정 기능을 활성화했습니다(전화를 걸지 않겠습니다)자동 수정특히 이 문제 때문에) setopt correct
내 .zshrc
.
이제 dtae
터미널에 입력하면 다음과 같은 결과가 나타납니다.
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
이 시점에서 zsh가 내 결정을 기억하기를 바랍니다. 따라서 다음에 입력할 때 자동으로 [1] dtae
로 수정되어야 합니다 . date
그러나 이런 일은 일어나지 않았고 zsh는 나에게 무엇을 해야할지 다시 물었습니다.
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] 물론 dtae
당시에 실제 명령이나 별칭이 존재하지 않는 한.
고쳐 쓰다:
zsh의 "올바른" 기능을 호출하여 자동으로 생성된 별칭을 포함하는 사용자 정의 파일을 생성하기 위해 zsh 소스 코드(file utils.c
, function ) 를 수정했습니다 .spckword
원래:
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
그러나 새로 수정된 파일을 제자리에 가져오는 방법을 모르겠습니다 .
답변1
정의된 내장 별칭을 기반으로 코드를 작성할 수 있습니다.여기
HashTable ht = aliastab;
ht->addnode(ht, ztrdup(wrong_value),
createaliasnode(ztrdup(right_value), 0));
(검증되지 않은)
source ~/.zsh_correct_aliases
.zshrc에 추가하세요.
편집하다:소스를 사용하여 테스트:
char *aliaspath = getenv("HOME");
strcat(aliaspath, "/.zsh_correct_aliases");
FILE *out = fopen(aliaspath, "ab+");
fprintf(out, "alias %s=\'", *s);
HashTable ht = aliastab;
ht->addnode(ht, ztrdup(*s),
createaliasnode(ztrdup(best), 0));
*s = dupstring(best);
fprintf(out, "%s\'\n", *s);
fclose(out);
if (hist)
hwrep(best);
그것은 다음을 제공합니다:
$ setopt correct
$ dtea
zsh: correct 'dtea' to 'date' [nyae]? y
lun. janv. 8 01:03:55 CET 2018
$ alias
dtea=date
$ dtea
lun. janv. 8 01:07:42 CET 2018
답변2
~/.zsh_ Correct_aliases에서 precmd 함수를 정의할 수 있습니다.