zsh를“올바른”기능으로 맞춤법 결정을 기억하게하는 방법 dtae할 때는 자동으로 date[1]로 수정해야합니다

내에서 활성화 하여 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 함수를 정의 할 수 있습니다.


답변