Zsh auto complete แนะนำฟังก์ชั่นที่สมบูรณ์ (_git _vim ฯลฯ )


9

ฉันมีความรำคาญเล็กน้อยกับวิธีการzshทำคำแนะนำที่สมบูรณ์สำหรับคำสั่งของฉัน

หากฉันพิมพ์จุดเริ่มต้นของคำสั่งที่ฉันยังไม่ได้ติดตั้งและกดtabมันจะแนะนำฟังก์ชันความสมบูรณ์ที่ติดตั้ง

ช่วยบอกว่าผมต้องการที่จะดำเนินการแต่ก็ไม่ได้ติดตั้งก็จะแนะนำvim_vim

มีวิธีปิดหรือไม่ หรือฉันทำอะไรผิดพลาดในการตั้งค่าของฉัน?

ทั้งหมด dotfiles github.com/henrikbjorn/castleของฉันอยู่ในที่สาธารณะ


ฉันเคยเห็นพฤติกรรมนี้มาก่อน แต่ในการตั้งค่าปัจจุบันของฉันดูเหมือนจะไม่ปรากฏ น่าเศร้าที่ฉันไม่มีเงื่อนงำซึ่งการตั้งค่าของฉันเปลี่ยนพฤติกรรมนั้น
ปรับแต่ง

คำตอบ:


8

ตามค่าเริ่มต้นเอ็นจินการเติมเต็มของ zsh จะพยายามต่อท้ายสิ่งที่คุณพิมพ์เท่านั้น คุณกำหนดค่าให้ลองเพิ่มคำนำหน้าด้วย เอ็นจิ้นการกำหนดค่าเสร็จสมบูรณ์แบบอินเทอร์แอคทีฟแบบง่าย ( compinstall) นำเสนอสิ่งนี้ภายใต้ สิ่งนี้จะแทรกบรรทัดแบบนี้ในของคุณ.zshrc:

zstyle ':completion:*' matcher-list '' 'l:|=* r:|=*'

zstyleชุด builtin (ส่วนใหญ่) การตั้งค่าเสร็จสิ้น matcher-listสไตล์เสร็จสิ้นคือรายการของวิธีการที่จะพยายามอย่างต่อเนื่องหยุดเมื่อมีอย่างน้อยหนึ่งในการแข่งขัน สตริงว่างหมายถึงความสมบูรณ์เริ่มต้น (คำต่อท้ายเท่านั้น) ควบคุมการจับคู่คาถาl:|=* r:|=*หมายถึงการลองจับคู่คำนำหน้า*และการจับคู่คำต่อท้าย*เช่นใดคำนำหน้าและคำต่อท้าย

คุณสามารถห้ามส่วนนำหน้าที่ขึ้นต้นด้วย_กัน นี้ยังช่วยให้ความสมบูรณ์ของคำที่ขึ้นต้นด้วย_และเสร็จสิ้นโดยการเพิ่มคำนำหน้า _แต่คำนำหน้าอาจจะไม่เริ่มต้นด้วย

zstyle ':completion:*' matcher-list '' 'l:|=[^_]* r:|=*'

สิ่งนี้ใช้กับความสำเร็จทั้งหมดไม่ใช่แค่ชื่อคำสั่งที่สมบูรณ์ ฉันไม่ทราบวิธี จำกัด สิ่งนี้เป็นชื่อคำสั่ง

ควรมีวิธีที่จะแยกชื่อคำสั่งที่แม่นยำมากขึ้นที่เริ่มต้นด้วย_แต่ฉันไม่ทราบวิธี การเริ่มต้นครั้งแรกนั้นมาพร้อมกับignored-patternsสไตล์ที่สมบูรณ์

zstyle ':completion:*:*:-command-:*:*' ignored-patterns '_*'       

สิ่งนี้ไม่รวมการแข่งขันที่เริ่มต้นด้วย_; อย่างไรก็ตามหากไม่มีการจับคู่ zsh จะพยายามอีกครั้งโดยไม่มีกฎการข้าม ข้อดีของเรื่องนี้คือถ้าคำสั่งเริ่มต้นด้วยการขีดเส้นใต้ในสถานที่แรกมันจะเสร็จในรอบที่สองนี้ ส่วนที่ร้ายก็คือว่า zsh จึงจะพยายามเพิ่มขีดอยู่แล้วถ้าไม่มีการแข่งขันดังนั้นหากคุณมีviและviewแต่ไม่vimแล้วกดTabหลังจากที่viจะนำเสนอviและviewแต่ไม่_vimแต่ถ้าคุณพิมพ์แล้วเสร็จจะนำเสนอvim_vim


ขอบคุณดูเหมือนว่าจะทำงานด้วยการทำหนึ่งในวิธีการแก้ปัญหาที่คุณระบุและฉันได้เรียนรู้มากมายเกี่ยวกับวิธีการทำงาน
Henrik Bjørnskov

2
วิธีแก้ปัญหากับการignore-patternsทำงานใช้ได้ดีสำหรับฉันแม้ว่าจะไม่มีการจับคู่ เพิ่งมีการตรวจสอบให้แน่ใจว่าไม่ได้มีcompleter _ignored
Adaephon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.