การเติมข้อความอัตโนมัติ Bash สำหรับตัวแปรสภาพแวดล้อมที่มีชื่อไดเรกทอรี


10

ฉันใช้สิ่งอื่น ๆ ทุบตี 4.2.37 บน Linux Mint 14

เมื่อฉันเติมข้อความอัตโนมัติให้กับชื่อของตัวแปรสภาพแวดล้อมโดยการพิมพ์Tabมันจะขยายเป็นชื่อของตัวแปรตามด้วยช่องว่าง

/ถ้าค่าของตัวแปรที่จะเกิดขึ้นชื่อไดเรกทอรีที่ฉันต้องการที่จะขยายไปที่ชื่อของตัวแปรตาม

ตัวอย่างเช่นถ้าฉันพิมพ์:

$ ls $HOM<tab>

มันขยายไปที่:

$ ls $HOME _

โดย_ทำเครื่องหมายที่ตำแหน่งของเคอร์เซอร์ ปัญหาคือว่าฉันก็มักจะต้องการที่จะดำเนินการพิมพ์ชื่อของไฟล์บางส่วนหรือไดเรกทอรีภายใต้ไดเรกทอรีบ้านของฉันซึ่งหมายความว่าฉันต้องพิมพ์แล้วbackspace/

ดังนั้นฉันต้องการที่จะขยายไป:

$ ls $HOME/_

สิ่งเดียวกันนี้เกิดขึ้นเมื่อฉันพิมพ์ชื่อตัวแปรทั้งหมด หลังจากls $HOME, เพิ่มช่องว่างและฉันต้องการที่จะเพิ่มtab/

(และแน่นอนฉันไม่ต้องการให้เพิ่ม/ถ้าค่าของตัวแปรไม่ใช่ชื่อไดเรกทอรี)

มีวิธีการบางอย่างที่ฉันสามารถบอกทุบตีการปฏิบัติตนในแบบที่ฉันต้องการทั้งผ่านทางคำสั่งทุบตีหรือโดยการอัปเดตของฉัน$HOME/.inputrc?

หมายเหตุ: ฉันกำลังมองหาวิธีที่จะทำให้tabพฤติกรรมในแบบที่ฉันต้องการโดยเฉพาะ วิธีในการบรรลุพฤติกรรมเดียวกันกับการกดแป้นแตกต่างกันจะน่าสนใจ แต่จะไม่ตอบคำถามของฉัน

(ฉันปิดการใช้งาน/etc/profile.d/bash_completion.shในระบบของฉันเพราะมันมีปฏิสัมพันธ์ไม่ดีset -o nounsetการทดสอบอย่างรวดเร็วบ่งชี้ว่าสิ่งนี้อาจไม่เกี่ยวข้องกับคำถามของฉัน)

อนึ่ง tcsh ทำสิ่งนี้: กำหนดตัวแปรสภาพแวดล้อมการ$FOOBARพิมพ์$FOOBA<tab>ขยายไปถึง$FOOBAR/ถ้ามันอ้างถึงไดเรกทอรี$FOOBAR(มีช่องว่าง) ถ้ามันไม่ได้ ไม่นั่นไม่เพียงพอที่จะชักชวนให้ฉันกลับไปที่ tcsh zsh ทำเช่นนี้เช่นกัน


1 ในกรณีที่คุณรู้สึกรักการผจญภัยที่นี่คือรหัส
l0b0

@ l0b0: (a) ฉันมีแล้ว (b) ฉันไม่รู้สึกว่าการผจญภัยนั้น (c) มันควรจะเป็นโปรแกรมที่เสร็จสมบูรณ์
Keith Thompson

คำตอบ:


6

คุณลักษณะนี้มีการใช้งานในทุบตี 4.3 เผยแพร่เมื่อ 2014-02-26

การอ้างอิงNEWSไฟล์ (รวมอยู่ที่ระดับบนสุดbash-4.3.tar.gzโปรดดูที่ลายเซ็น GPG ):

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

การทดสอบอย่างรวดเร็วด้วยสำเนาที่สร้างจากแหล่งแสดงว่าถ้าฉันพิมพ์

$ ls $HOM<tab>

ตอนนี้มันขยายไป

$ ls $HOME/

(อนึ่ง zsh ก็ทำเช่นนี้ด้วย)


1
ต้องติดตั้งทุบตีด้วยตนเองสำหรับสิ่งนี้ 4.3 ไม่ได้อยู่ใน repos ของ fedora 20
jozxyqk

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