สมาร์ทแท็บเสร็จสมบูรณ์ (สำหรับไดเรกทอรี)


7

มีรุ่นของเชลล์ที่มีแท็บที่ชาญฉลาดมากขึ้นหรือไม่

ฉันต้องการพิมพ์

cd foo-<TAB>

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

cd foo-<TAB>
(1) foo-bar1  (2) foo-bar2  (3) foo-bad

ดังนั้นหลังจากที่<TAB>ฉันจะพิมพ์และมันจะพาฉันไป3 foo-badหรือมิฉะนั้นให้ใช้ปุ่มลูกศรแทนการพิมพ์ตัวเลขก็ได้

คำตอบ:


10

คุณสามารถเปิดใช้งานmenu-completeใน Bash เพื่อก้าวผ่านรายการต่างๆบนบรรทัดคำสั่งในแต่ละครั้งที่คุณกด Tab นี่ไม่ใช่สิ่งที่คุณกำลังมองหา หากคุณต้องการลองทำสิ่งนี้ได้ที่หน้าจอพร้อมรับคำสั่ง:

bind '"\C-i": menu-complete'

หากต้องการคงอยู่ให้เพิ่มสิ่งนี้ลงใน~/.inputrcไฟล์ของคุณ:

"\C-i": menu-complete

Zsh มีคุณสมบัติที่ช่วยให้คุณใช้ปุ่มลูกศรเพื่อเลือกรายการ เพิ่ม (หรือรูปแบบอื่น) ลงใน~/.zshrcไฟล์ของคุณ:

zstyle ':completion:*' menu select=0

ดูman zshcompsysและค้นหา "select =" (จะอยู่ในส่วนของmenu"Standard Style") สำหรับข้อมูลเพิ่มเติม

มิฉะนั้นใน Bash คุณสามารถเขียนฟังก์ชั่น (หรือสร้างฟังก์ชั่นเสร็จสิ้นของคุณเอง) ที่จะทำบางสิ่งตามselectคำสั่ง สิ่งนี้ง่ายมาก:

$ select a in x y z; do cd $a; done
1) x
2) y
3) z
#?

คุณต้องทำให้มันออกมามากมายเพื่อทำสิ่งที่คุณต้องการ


ฉันชอบselectทางออกของคุณ นั่นคือสิ่งที่ฉันต้องการ! ฉันเพิ่มbreakหลังจากcd $aและฉันจะนามแฝงคำสั่งนี้ นั่นเป็นวิธีที่ดีกว่าการทำให้แท็บสมบูรณ์
dehmann

@dehman: มันเป็นส่วนหนึ่งของ "เนื้อออกว่า" คุณต้องมีbreakคำสั่ง ลอง: select a in x y z; do cd $a; break; done. คุณสามารถใช้findเพื่อสร้างรายการไดเรกทอรีให้เลือกมากกว่าการเข้ารหัสฮาร์ดไดรฟ์ สิ่งที่คุณอาจต้องการตรวจสอบก็คือCDPATHตัวแปร (และที่นี่ )
Dennis Williamson

9

คุณใช้ความสมบูรณ์ตามปกติอยู่แล้ว? ลอง

complete -d cd pushd rmdir

ในเปลือกของคุณและดูว่ามันใกล้เพียงพอกับสิ่งที่คุณต้องการหรือไม่

คุณสามารถลอง zsh ซึ่งทำได้ดีกว่าทุบตี


2
ฉันกำลังมองหาวิธีที่จะทำให้การเติมข้อความอัตโนมัติสำหรับแผ่นซีดีไม่รวมไดเรกทอรีที่ไม่ใช่ สิ่งนี้ทำ คุณร็อค
Andy

@Andy ตรวจสอบ bash_completion @ bash-completion.alioth.debian.org
Rich Homolka
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.