จะทำให้การเติมข้อความอัตโนมัติของเทอร์มินัลเกิดขึ้นเมื่อมีหลายไฟล์ / ไดเรกทอรีได้อย่างไร?


32

หากฉันมีหลายไดเรกทอรีเช่น:

afoo abar

บางครั้งเทอร์มินัลของฉันจะปฏิเสธการเติมข้อความอัตโนมัติเมื่อฉันกดแท็บ (เช่น "cd a" ตามด้วยแท็บ) แล้วพิมพ์รายการไดเรกทอรีแทน บางครั้งมันก็ส่งเสียงที่ดังและน่ารำคาญ แนวคิดใดที่จะทำให้การเติมข้อความอัตโนมัติในกรณีเช่นนี้? เช่นสามารถแสดง abar ก่อนจากนั้น afoo ถ้าฉันกด tab อีกครั้ง ฉันเห็นกรณีนี้เป็นใน windows หรือ applciation บางอย่างใน Ubuntu

คำตอบ:


46

สิ่งที่ช่วยชีวิตฉันคือการทุบตีวงจรผ่านความเป็นไปได้แทนที่จะแสดงรายการโง่

เนื่องจาก bash ใช้readlineสำหรับการทำให้สมบูรณ์อัตโนมัติให้เพิ่มบรรทัดต่อไปนี้ลงใน~/.inputrc

เมื่อคุณมีความพึงพอใจและมีการทดสอบอย่างละเอียดด้านล่างแก้ปัญหาไม่กี่วัน / สัปดาห์, ตัดและวาง (ไม่ได้คัดลอก!) การตั้งค่าเดียวกันจาก~/.inputrcการ/etc/inputrcที่มีการตั้งค่าระบบกว้างนี้ทำให้สามารถใช้ได้กับผู้ใช้ทั้งหมดในระบบของคุณ (รวมถึงแขก)

The codez:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

จากนั้นexitเทอร์มินัลของคุณ (หรือเทอร์มินัลระยะไกลอย่างเช่นผงสำหรับอุดรู) แล้วเปิดอีกครั้ง ...

ตัวอย่าง:

  1. เมื่อคุณมี 3 ไฟล์: file1, file2และfile3และคุณพิมพ์:

    e fTabTabTab

    มันจะวนผ่าน:

    e file1
    e file2
    e file3

    และเมื่อคุณต้องการวนกลับหลังเพียงกดShift+Tab

  2. เมื่อคุณพิมพ์:

    very-complicated-command with lots of command line parameters

    และครั้งต่อไปที่คุณต้องการคำสั่งเดียวกันคุณเพียงพิมพ์:

    very

    และมันจะพิมพ์สำหรับคุณ:

    very-complicated-command with lots of command line parameters

นี่จะช่วยคุณประหยัดเวลาในการทุบตี! ;-)


2
+1 น่าสนใจ แต่: 1. ~/.inputrcอาจดีกว่า/etc/inputrcและ 2 ฉันคิดว่าคุณสามารถตั้งค่านี้bashได้โดยตรง: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru

นี้ค่อนข้างดีขอบคุณ (และมี upvote ของฉัน) มีวิธีสากลในการแสดงตัวเลือกที่จะวนซ้ำซึ่งรวมเอาสิ่งที่ดีที่สุดของโลกทั้งสองนี้เข้าด้วยกันหรือไม่? ฉันชอบความเป็นไปได้ของแท็บ + แท็บที่มีโฟลเดอร์และคำสั่งย่อย ฯลฯ ดังนั้นฉันจึงไม่จำเป็นต้องจดจำพวกเขาทั้งหมด (เช่นgit branch <tab through branches>อย่างไรก็ตามถ้าฉันสามารถดูรายการและแท็บผ่านรายการของมันมันจะยอดเยี่ยมมาก! สำหรับไดเรกทอรีและไฟล์lsเป็นตัวเลือกในการดูว่ามีรายการใดบ้างอย่างไรก็ตามสำหรับคำสั่งย่อยนั้นไม่ใช่เรื่องง่ายหรือชัดเจนโชคไม่ดี
Erik

งานนี้ยังบน PuTTy! เพิ่งต้องเริ่มใหม่อีกครั้ง :)
np8

@Erik: เห็นได้ชัดว่าสิ่งที่คุณขอเป็นไปได้แต่จะไม่แก้ไขคำตอบของฉันเพื่อให้สิ่งที่ง่ายที่นี่ (ลบความคิดเห็นเก่าที่ไม่สามารถทำได้)
Fabby

18

หลังจากวันที่ 1 tabคุณต้องใส่ตัวอักษรมากขึ้น ดังนั้นหากคุณพิมพ์

cd a

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

cd atabtabftabtab

จะส่งผลให้

cd afoo

2
IMHO: นี่เป็นวิธีที่ถูกต้อง ฉันเองพบว่าพฤติกรรมของ windows น่ารำคาญมาก พิจารณากรณีที่คุณมีไฟล์จำนวนมากที่ขึ้นต้นด้วยaและคุณต้องการไฟล์ล่าสุด เมื่อคุณกดแท็บโดยไม่ตั้งใจหลังจากที่aคุณต้องวนรายการความสำเร็จที่เป็นไปได้ทั้งหมดเพื่อไปยังสิ่งที่ถูกต้อง
โทเบียส

@Tobias: เมื่อคุณเผลอกด [Tab] เร็วเกินไปโดยใช้ระบบอื่น ๆยังคงมี [Ctrl] [K] ... ;-)
Fabby
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.