내에서 활성화 하여 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의 “올바른”기능을 호출하여 자동으로 작성된 별명을 포함하는 사용자 정의 파일을 작성 하도록 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
파일을 적절하게 소싱하는 방법을 모르겠습니다 .
답변
여기에 정의 된 내장 별칭을 기반으로 코드를 만들 수 있습니다
HashTable ht = aliastab;
ht->addnode(ht, ztrdup(wrong_value),
createaliasnode(ztrdup(right_value), 0));
(검증되지 않은)
그리고 source ~/.zsh_correct_aliases
당신에게 추가하십시오.
편집 : 소스로 테스트 :
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
답변
~ / .zsh_correct_aliases를 소싱하는 precmd 함수를 정의 할 수 있습니다.