Saya telah mengaktifkan koreksi (saya tidak akan menyebutnya koreksi otomatis khusus karena masalah ini) di zsh dengan memungkinkan setopt correctdi saya .zshrc.
Sekarang, ketika saya mengetik dtaeterminal, saya mendapatkan:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
Pada titik ini saya ingin zsh mengingat keputusan saya. Jadi pada saat saya mengetiknya dtaesecara otomatis harus benar ke date[1]. Namun, ini tidak terjadi, dan zsh kembali bertanya kepada saya apa yang harus dilakukan:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] Kecuali, tentu saja, jika pada saat itu ada dtaeperintah atau alias yang sebenarnya .
Memperbarui:
Saya telah berhasil memodifikasi kode sumber zsh (file utils.c, fungsi spckword) untuk membuat file khusus yang berisi alias yang dibuat secara otomatis dengan pemanggilan fungsi "benar" zsh:
asli:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
diubah:
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);
}
Setelah mengeksekusi dtae, baris berikut ditambahkan ke file ~/.zsh_correct_aliases:
alias dtae='date'
Namun, saya tidak tahu bagaimana cara mencari file yang baru dimodifikasi ~/.zsh_correct_aliasesdi tempat.
dtaeada, kemudian diaktifkan kembali jika / saat dtaetidak ditentukan lagi.
command_not_found_handlerwaktu parsing alih-alih runtime), dan kemudian mengimplementasikan logika dalam kode zsh.
dtaemuncul atau hanya dinonaktifkan sementara?