ผมได้เปิดใช้งานการแก้ไข (ฉันจะไม่เรียกว่าการแก้ไขอัตโนมัติเฉพาะเพราะปัญหานี้) ใน 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 (ไฟล์utils.c
, ฟังก์ชั่นspckword
) เพื่อสร้างไฟล์ที่กำหนดเองที่มีชื่อแทนที่สร้างขึ้นโดยอัตโนมัติด้วยการเรียกใช้ฟังก์ชัน "แก้ไข" ของ zsh:
เดิม:
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
ไฟล์ที่แก้ไขใหม่ในสถานที่
dtae
มีอยู่จากนั้นเรียกคืนหาก / เมื่อdtae
ไม่ได้ถูกกำหนดอีกต่อไป
command_not_found_handler
แต่ในเวลาในการแยกวิเคราะห์แทนที่จะรันไทม์) แล้วใช้ตรรกะในโค้ด zsh
dtae
เกิดการมีอยู่หรือเพิ่งปิดการใช้งานชั่วคราว?