Tôi đã kích hoạt tính năng sửa lỗi (tôi sẽ không gọi nó là tự động sửa lỗi cụ thể vì vấn đề này) trong zsh bằng cách bật setopt correct
trong tôi .zshrc
.
Bây giờ, khi tôi gõ dtae
vào một thiết bị đầu cuối, tôi nhận được:
dtae
zsh: correct 'dtae' to 'date' [nyae]? y
Tue Mar 31 11:39:31 CEST 2015
Tại thời điểm này tôi muốn zsh nhớ quyết định của tôi. Vì vậy, lần sau khi tôi gõ, dtae
nó sẽ tự động sửa thành date
[1]. Tuy nhiên, điều này không xảy ra và zsh lại hỏi tôi phải làm gì:
dtae
zsh: correct 'dtae' to 'date' [nyae]?
[1] Trừ khi, tất nhiên, nếu tại thời điểm đó tồn tại một dtae
lệnh hoặc bí danh thực sự .
Cập nhật:
Tôi đã quản lý để sửa đổi mã nguồn zsh (tệp utils.c
, hàm spckword
) để tạo một tệp tùy chỉnh chứa các bí danh được tạo tự động với lời gọi của chức năng "chính xác" của zsh:
nguyên:
if (x == 'y' || x == ' ' || x == '\t')
{
*s = dupstring(best);
if (hist)
hwrep(best);
}
sửa đổi:
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);
}
Khi thực hiện dtae
, dòng sau được thêm vào tệp ~/.zsh_correct_aliases
:
alias dtae='date'
Tuy nhiên, tôi không biết làm thế nào để lấy nguồn ~/.zsh_correct_aliases
tệp mới được sửa đổi tại chỗ.
dtae
tồn tại, sau đó khôi phục nếu / khi dtae
không được xác định nữa.
command_not_found_handler
nhưng tại thời điểm phân tích cú pháp thay vì thời gian chạy), và sau đó thực hiện logic trong mã zsh.
dtae
sinh ra hoặc chỉ bị vô hiệu hóa tạm thời?