zsh를 "올바른" 기능으로 만드는 방법 철자 수정 결정을 기억함

zsh를 "올바른" 기능으로 만드는 방법 철자 수정 결정을 기억함

수정 기능을 활성화했습니다(전화를 걸지 않겠습니다)자동 수정특히 이 문제 때문에) 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 함수를 정의할 수 있습니다.

관련 정보