ความสมบูรณ์ของแท็บ Zsh ไม่ทำงานตามที่ต้องการสำหรับเส้นทางบางส่วน


17

zshฉันต้องการกรณีตายเสร็จสิ้นเลือนสำหรับไฟล์และไดเรกทอรีใน หลังจากอ่านคู่มือสองสามชั่วโมงนี่คือสิ่งที่ฉันคิด:

zstyle ':completion:*:*:*:*:globbed-files' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:local-directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'
zstyle ':completion:*:*:*:*:directories' matcher 'r:|?=** m:{a-z\-}={A-Z\_}'

นอกจากนี้ฉันต้องการกดTABหนึ่งครั้งเพื่อแสดงความสำเร็จที่เป็นไปได้เพียงปรับเปลี่ยนสิ่งที่ฉันได้พิมพ์หากมีความสมบูรณ์เพียงอย่างเดียว จากนั้นการกดTABครั้งที่สองควรทำให้ฉันเข้าสู่โหมด "เสร็จสิ้นเมนู" จากคู่มือฉันพบสิ่งนี้:

zstyle ':completion:*' menu select

ตอนนี้ทุกอย่างทำงานได้ตามที่ควรยกเว้นในกรณีเดียว ฉันมีสองโฟลเดอร์Desktopและ.rstudio-desktopในโฮมไดเร็กตอรี่ของฉัน ตั้งแต่ฉันมีsetopt globdotsฉันคาดว่าจะพิมพ์ต่อไปนี้:

$ cd ~/dktop<TAB>

ที่จะออกคำสั่งของฉันเป็นเข้ามาและแสดงเป็นผู้สมัครเสร็จสิ้นและDesktop .rstudio-desktopแต่มันจะลบ dktopทิ้งฉันด้วยสิ่งต่อไปนี้:

$ cd ~/

ฉันดูคู่มือที่เกี่ยวข้องทั้งหมดคำแนะนำคำถามการแลกเปลี่ยนกองและแหล่งข้อมูลอื่น ๆ แต่สิ่งที่ฉันทำฉันไม่สามารถทำงานนี้ได้

ที่น่าสนใจคือถ้าฉันอยู่ในโฮมไดเร็กตอรี่แล้วพิมพ์ต่อไปนี้ทุกอย่างจะทำงานได้ตามที่คาดไว้:

$ cd dktop<TAB>

นั่นคือเป็นเพียงปัญหาของเซกเมนต์ของเส้นทางที่ไม่นำหน้า (และคุณสามารถเห็นได้C-x hว่าสิ่งนี้สอดคล้องกับdirectoriesแท็กมากกว่าที่local-directoriesจะใช้แท็ก)

เพื่อให้สามารถทำซ้ำได้ง่ายนี่คือสิ่ง~/.zshrcที่จะสร้างสถานการณ์และพฤติกรรมที่อธิบายไว้ข้างต้น (ทดสอบบนเครื่องเสมือน El Capitan ใหม่ด้วยzshจาก Homebrew)


ทำซ้ำไม่ได้ บนzsh 5.3.1 อัตราผลตอบแทน Arch Linuxcd ~/dktop<tab>cd ~/Desktop
PythonNut

@PythonNut เมื่อใช้zsh 5.3.1กับ OS X ปัญหาจะเกิดขึ้นอีกครั้ง เป็นที่น่าสนใจว่ามีความแตกต่างระหว่างระบบปฏิบัติการ
Radon Rosborough

1
@ PythonNut ที่จริงแล้วฉันคิดว่านี่เป็นเพราะลีนุกซ์เป็นตัวพิมพ์เล็กและตัวใหญ่
Radon Rosborough

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

คำตอบ:


1

ทางออกหนึ่งที่เป็นไปได้คือ:

bindkey "^I" expand-word

นี่จะทำให้แท็บขยาย~/ไปยังพา ธ สัมบูรณ์


บางทีฉันอาจขาดอะไรบางอย่าง แต่ฉันไม่เห็นว่าสิ่งนี้เกี่ยวข้องกับวิธีใด ๆ ในการทำให้แท็บเสร็จสมบูรณ์หรือแก้ไขปัญหาที่อธิบายไว้ข้างต้น ถ้าฉันทำตามที่คุณแนะนำการกด TAB จะให้ฉันcd /Users/raxod502/dktopและการปิดใช้งานจะเสร็จสิ้น
Radon Rosborough

@RadonRosborough ความหวังก็คือโดยการขยาย~/ไปสู่เส้นทางที่สมบูรณ์ที่ความสมบูรณ์ของฟัซซีจะเริ่มทำงาน ดูเหมือนว่าเป็นหนึ่งในกรณีที่ปัญหาคือว่ามันประเมินมันหนึ่งครั้ง แต่คุณต้องการให้มันประเมินสองครั้งเพื่อที่จะทำงานดังนั้นการมีเส้นทางที่สมบูรณ์แทนที่จะ~/หมายถึงว่ามันจะกลับไปใช้การประเมินเพียงครั้งเดียว แต่อึฉันขอโทษฉันลืมว่า bindkey แทนที่ bindings เก่าและฉันไม่สามารถหาอะไรที่บอกว่าถ้ามันเป็นไปได้ที่จะ bindkey สองฟังก์ชั่นหนึ่งคีย์ หากไม่มี bindkey ของฉันการสำเร็จของคุณจะเป็นไปตามที่กำหนดเมื่อมีเส้นทางที่แน่นอนหรือไม่
ConstipatedNinja

เลขที่มันทำให้ไม่แตกต่างไม่ว่าจะเป็นเส้นทางเข้าเป็น~/dktopหรือ/Users/raxod502/dktop; ผลลัพธ์จะเหมือนกันคือdktopถูกลบเมื่อฉันกด TAB
Radon Rosborough
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.