คำแนะนำอัตโนมัติที่รวดเร็วเหมือนปลาและไม่เกะกะสำหรับ zsh
โดยจะแนะนำคำสั่งในขณะที่คุณพิมพ์โดยอิงตามประวัติและความสำเร็จ
ข้อกำหนด: Zsh v4.3.11 หรือใหม่กว่า
ดูที่ INSTALL.md
ขณะที่คุณพิมพ์คำสั่ง คุณจะเห็นการดำเนินการเสร็จสิ้นหลังเคอร์เซอร์เป็นสีเทาหม่น สีนี้สามารถเปลี่ยนแปลงได้โดยการตั้งค่าตัวแปร ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE
ดูการกำหนดค่า
หากคุณกดปุ่ม → ( วิดเจ็ต forward-char
) หรือ สิ้นสุด (วิด end-of-line
) ด้วยเคอร์เซอร์ที่ท้ายบัฟเฟอร์ มันจะยอมรับข้อเสนอแนะ โดยแทนที่เนื้อหาของบัฟเฟอร์บรรทัดคำสั่งด้วยคำแนะนำ
หากคุณเรียกใช้วิดเจ็ต forward-word
วิดเจ็ตจะยอมรับคำแนะนำบางส่วนจนถึงจุดที่เคอร์เซอร์ย้ายไป
คุณอาจต้องการแทนที่ตัวแปรการกำหนดค่าส่วนกลางเริ่มต้น ค่าเริ่มต้นของตัวแปรเหล่านี้สามารถพบได้ที่นี่
หมายเหตุ: หากคุณใช้ Oh My Zsh คุณสามารถใส่การกำหนดค่านี้ลงในไฟล์ในไดเร็กทอรี $ZSH_CUSTOM
ดูความคิดเห็นของพวกเขาเกี่ยวกับการเอาชนะภายใน
ตั้งค่า ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE
เพื่อกำหนดค่าสไตล์ที่แสดงคำแนะนำ ค่าเริ่มต้นคือ fg=8
ซึ่งจะตั้งค่าสีพื้นหน้าเป็นสี 8 จากชุดสี 256 สี หากเทอร์มินัลของคุณรองรับเพียง 8 สี คุณจะต้องใช้ตัวเลขระหว่าง 0 ถึง 7
นอกจากนี้ยังสามารถตั้งค่าสีพื้นหลังได้ และคำแนะนำสามารถจัดรูปแบบให้เป็นตัวหนา ขีดเส้นใต้ หรือโดดเด่นได้ ตัวอย่างเช่น จะแสดงคำแนะนำด้วยข้อความสีชมพูตัวหนา ขีดเส้นใต้ บนพื้นหลังสีฟ้า:
ZSH_AUTOSUGGEST_HIGHLIGHT_STYLE= " fg=#ff00ff,bg=cyan,bold,underline "
สำหรับข้อมูลเพิ่มเติม โปรดอ่านส่วนการเน้นอักขระของคู่มือ zsh: man zshzle
หรือออนไลน์
หมายเหตุ: ผู้ใช้ iTerm2 บางรายรายงานว่าไม่สามารถดูคำแนะนำได้ หากสิ่งนี้ส่งผลกระทบต่อคุณ ปัญหาน่าจะเกิดจากการตั้งค่าสีที่ไม่ถูกต้อง เพื่อแก้ไขปัญหานี้ ให้ไปที่การตั้งค่าของ iTerm2 ไปที่โปรไฟล์ > สี และตรวจสอบให้แน่ใจว่าสีสำหรับสีพื้นฐาน > พื้นหลังและสี ANSI > สีดำสว่างนั้น แตกต่างกัน
ZSH_AUTOSUGGEST_STRATEGY
คืออาร์เรย์ที่ระบุวิธีการสร้างคำแนะนำ กลยุทธ์ในอาเรย์จะถูกพยายามอย่างต่อเนื่องจนกว่าจะพบข้อเสนอแนะ ขณะนี้มีสามกลยุทธ์ในตัวให้เลือก:
history
: เลือกการแข่งขันล่าสุดจากประวัติcompletion
: เลือกข้อเสนอแนะตามสิ่งที่แนะนำให้เสร็จสิ้นแท็บ (ต้องใช้โมดูล zpty
ซึ่งรวมอยู่ใน zsh ตั้งแต่ 4.0.1)match_prev_cmd
: ชอบ history
แต่เลือกการจับคู่ล่าสุดที่มีรายการประวัติก่อนหน้าตรงกับคำสั่งที่ดำเนินการล่าสุด (ข้อมูลเพิ่มเติม) โปรดทราบว่ากลยุทธ์นี้จะไม่ทำงานตามที่คาดไว้กับตัวเลือก ZSH ที่ไม่รักษาลำดับประวัติ เช่น HIST_IGNORE_ALL_DUPS
หรือ HIST_EXPIRE_DUPS_FIRST
ตัวอย่างเช่น การตั้งค่า ZSH_AUTOSUGGEST_STRATEGY=(history completion)
จะพยายามค้นหาข้อเสนอแนะจากประวัติของคุณก่อน แต่หากไม่พบรายการที่ตรงกัน ก็จะพบข้อเสนอแนะจากกลไกการเสร็จสิ้น
ปลั๊กอินนี้ทำงานโดยทริกเกอร์พฤติกรรมแบบกำหนดเองเมื่อมีการเรียกใช้วิดเจ็ต zle บางตัว คุณสามารถเพิ่มและลบวิดเจ็ตออกจากอาร์เรย์เหล่านี้เพื่อเปลี่ยนพฤติกรรมของปลั๊กอินนี้ได้:
ZSH_AUTOSUGGEST_CLEAR_WIDGETS
: วิดเจ็ตในอาร์เรย์นี้จะล้างคำแนะนำเมื่อมีการเรียกใช้ZSH_AUTOSUGGEST_ACCEPT_WIDGETS
: วิดเจ็ตในอาร์เรย์นี้จะยอมรับคำแนะนำเมื่อมีการเรียกใช้ZSH_AUTOSUGGEST_EXECUTE_WIDGETS
: วิดเจ็ตในอาร์เรย์นี้จะดำเนินการตามคำแนะนำเมื่อมีการเรียกใช้ZSH_AUTOSUGGEST_PARTIAL_ACCEPT_WIDGETS
: วิดเจ็ตในอาร์เรย์นี้จะยอมรับคำแนะนำบางส่วนเมื่อมีการเรียกใช้ZSH_AUTOSUGGEST_IGNORE_WIDGETS
: วิดเจ็ตในอาร์เรย์นี้จะไม่ทริกเกอร์การทำงานแบบกำหนดเองใดๆวิดเจ็ตที่แก้ไขบัฟเฟอร์และไม่พบในอาร์เรย์ใดๆ เหล่านี้จะดึงคำแนะนำใหม่หลังจากที่ถูกเรียกใช้
หมายเหตุ: วิดเจ็ตไม่ควรอยู่ในอาร์เรย์ข้างต้นมากกว่าหนึ่งอาร์เรย์
ตั้งค่า ZSH_AUTOSUGGEST_BUFFER_MAX_SIZE
เป็นค่าจำนวนเต็มเพื่อปิดใช้งานคำแนะนำอัตโนมัติสำหรับบัฟเฟอร์ขนาดใหญ่ ค่าเริ่มต้นไม่ได้ตั้งค่า ซึ่งหมายความว่าจะมีการลองใช้คำแนะนำอัตโนมัติสำหรับบัฟเฟอร์ขนาดใดก็ได้ ค่าที่แนะนำคือ 20 ซึ่งจะมีประโยชน์เมื่อวางข้อความจำนวนมากในเทอร์มินัล เพื่อหลีกเลี่ยงทริกเกอร์การแนะนำอัตโนมัติสำหรับสตริงที่ยาวเกินไป
คำแนะนำจะถูกดึงข้อมูลแบบอะซิงโครนัสตามค่าเริ่มต้นใน zsh เวอร์ชัน 5.0.8 และสูงกว่า หากต้องการปิดใช้งานคำแนะนำแบบอะซิงโครนัสและดึงข้อมูลพร้อมกันแทน ให้ unset ZSH_AUTOSUGGEST_USE_ASYNC
หลังจากจัดหาปลั๊กอินแล้ว
อีกทางหนึ่ง หากคุณใช้ zsh เวอร์ชันเก่ากว่า 5.0.8 และต้องการเปิดใช้งานโหมดอะซิงโครนัส ให้ตั้งค่าตัวแปร ZSH_AUTOSUGGEST_USE_ASYNC
หลังจากจัดหาปลั๊กอิน (สามารถตั้งค่าเป็นอะไรก็ได้) โปรดทราบว่ามีข้อบกพร่องใน zsh เวอร์ชันเก่ากว่า 5.0.8 โดยที่ การกด Ctrl + c จะล้มเหลวในการรีเซ็ตพรอมต์ทันทีหลังจากดึงคำแนะนำแบบอะซิงโครนัส
ตั้งค่า ZSH_AUTOSUGGEST_MANUAL_REBIND
(สามารถตั้งค่าเป็นอะไรก็ได้) เพื่อปิดใช้งานการเชื่อมโยงวิดเจ็ตอัตโนมัติใหม่ในแต่ละ precmd นี่อาจเป็นการเพิ่มประสิทธิภาพได้อย่างมาก แต่คุณจะต้องจัดการการผูกใหม่ด้วยตัวเองหากรายการวิดเจ็ตใดๆ เปลี่ยนแปลง หรือหากคุณหรือปลั๊กอินอื่นรวมวิดเจ็ตที่แนะนำอัตโนมัติใดๆ หากต้องการเชื่อมโยงวิดเจ็ตใหม่ ให้รัน _zsh_autosuggest_bind_widgets
ตั้งค่า ZSH_AUTOSUGGEST_HISTORY_IGNORE
เป็นรูปแบบ glob เพื่อป้องกันข้อเสนอแนะสำหรับรายการประวัติที่ตรงกับรูปแบบ ตัวอย่างเช่น ตั้งค่าเป็น "cd *"
เพื่อไม่ให้แนะนำคำสั่ง cd
ใดๆ จากประวัติ หรือตั้งค่าเป็น "?(#c50,)"
เพื่อไม่ให้แนะนำอะไรที่มีความยาว 50 อักขระหรือนานกว่านั้น
หมายเหตุ: สิ่งนี้มีผลกับ history
และกลยุทธ์การแนะนำ match_prev_cmd
เท่านั้น
ตั้งค่า ZSH_AUTOSUGGEST_COMPLETION_IGNORE
เป็นรูปแบบ glob เพื่อป้องกันไม่ให้เสนอข้อเสนอแนะที่สมบูรณ์เมื่อบัฟเฟอร์ตรงกับรูปแบบนั้น ตัวอย่างเช่น ตั้งค่าเป็น "git *"
เพื่อปิดใช้งานคำแนะนำการทำให้คำสั่งย่อย git เสร็จสมบูรณ์
หมายเหตุ: สิ่งนี้ส่งผลต่อกลยุทธ์ข้อเสนอแนะการ completion
เท่านั้น
ปลั๊กอินนี้มีวิดเจ็ตบางอย่างที่คุณสามารถใช้กับ bindkey
:
autosuggest-accept
: ยอมรับข้อเสนอแนะปัจจุบันautosuggest-execute
: ยอมรับและดำเนินการคำแนะนำปัจจุบันautosuggest-clear
: ล้างคำแนะนำปัจจุบันautosuggest-fetch
: ดึงคำแนะนำ (ทำงานได้แม้ในขณะที่คำแนะนำถูกปิดใช้งาน)autosuggest-disable
: ปิดใช้งานคำแนะนำautosuggest-enable
: เปิดใช้งานคำแนะนำอีกครั้งautosuggest-toggle
: สลับระหว่างคำแนะนำที่เปิด/ปิดใช้ตัวอย่างเช่น การดำเนินการนี้จะผูก Ctrl + ช่องว่าง เพื่อยอมรับคำแนะนำปัจจุบัน
bindkey ' ^ ' autosuggest-accept
หากคุณประสบปัญหา โปรดค้นหาในรายการปัญหาบน GitHub เพื่อดูว่ามีผู้อื่นรายงานปัญหาดังกล่าวแล้วหรือไม่
ก่อนที่จะรายงานปัญหา โปรดลองปิดการใช้งานส่วนการกำหนดค่าของคุณและปลั๊กอินอื่นๆ ที่อาจขัดแย้งกับปลั๊กอินนี้ชั่วคราวเพื่อแยกปัญหา
เมื่อรายงานปัญหา โปรดระบุ:
.zshrc
ที่เล็กที่สุดและง่ายที่สุดที่จะทำให้เกิดปัญหาอีกครั้ง ดูความคิดเห็นนี้เพื่อเป็นตัวอย่างที่ดีของความหมายนี้zsh --version
) ลบโค้ดที่อ้างอิงปลั๊กอินนี้ออกจาก ~/.zshrc
ลบที่เก็บ git ออกจากฮาร์ดไดรฟ์ของคุณ
rm -rf ~ /.zsh/zsh-autosuggestions # Or wherever you installed
แก้ไขไฟล์ต้นฉบับใน src/
. เรียกใช้ make
เพื่อสร้าง zsh-autosuggestions.zsh
จากไฟล์ต้นฉบับเหล่านั้น
ยินดีต้อนรับคำขอดึง! หากคุณส่งคำขอดึง โปรด:
develop
( ไม่ใช่ master
) การทดสอบเขียนด้วยภาษา Ruby โดยใช้กรอบงาน rspec
พวกเขาใช้ tmux
เพื่อขับเคลื่อนเทอร์มินัลเทียม ส่งการกดแป้นพิมพ์จำลอง และยืนยันเนื้อหาเทอร์มินัล
ไฟล์ทดสอบอยู่ใน spec/
. หากต้องการรันการทดสอบ ให้รัน make test
หากต้องการรันการทดสอบเฉพาะ ให้รัน TESTS=spec/some_spec.rb make test
คุณยังสามารถระบุไบนารี zsh
ที่จะใช้โดยการตั้งค่าตัวแปรสภาพแวดล้อม TEST_ZSH_BIN
(เช่น TEST_ZSH_BIN=/bin/zsh make test
)
คุณสามารถดำเนินการทดสอบสำหรับ zsh เวอร์ชันที่รองรับในอิมเมจ Docker ได้โดยการสร้างอิมเมจจาก Dockerfile ที่ให้มา หากต้องการสร้างอิมเมจนักเทียบท่าสำหรับ zsh เวอร์ชันเฉพาะ (โดยที่ <version>
ด้านล่างถูกแทนที่ด้วยเนื้อหาของบรรทัดจากไฟล์ ZSH_VERSIONS
) ให้รัน:
docker build --build-arg TEST_ZSH_VERSION= < version > -t zsh-autosuggestions-test .
หลังจากสร้างอิมเมจแล้ว ให้รันการทดสอบผ่าน:
docker run -it -v $PWD :/zsh-autosuggestions zsh-autosuggestions-test make test
โครงการนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT สำหรับข้อความใบอนุญาตฉบับเต็ม โปรดดูไฟล์ LICENSE