Saya telah mengaktifkan koreksi (saya tidak akan menyebutnya koreksi otomatis khusus karena masalah ini) di zsh dengan memungkinkan setopt correct
di saya .zshrc
.
Sekarang, ketika saya mengetik dtae
terminal, 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 dtae
secara 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 dtae
perintah 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_aliases
di tempat.
dtae
muncul atau hanya dinonaktifkan sementara?dtae
ada, kemudian diaktifkan kembali jika / saatdtae
tidak ditentukan lagi.command_not_found_handler
waktu parsing alih-alih runtime), dan kemudian mengimplementasikan logika dalam kode zsh.Jawaban:
Anda bisa mendasarkan kode Anda pada alias bawaan yang ditentukan di sini
(tidak diuji)
Dan tambahkan
source ~/.zsh_correct_aliases
ke Anda .zshrcEDIT : diuji dengan sumber:
Memberikan:
sumber
Anda dapat mendefinisikan fungsi precmd yang menghasilkan ~ / .zsh_correct_aliases.
sumber