การเติมแท็บแบบคำนึงถึงขนาดตัวพิมพ์ใน Bash


142

มีวิธีใดบ้างที่จะทำให้แท็บ Bash สมบูรณ์ขึ้นและเล็กลงได้?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

ฉันใช้ Mac OS X 10.6

คำตอบ:


170

อัพเดตข้อความใน/etc/inputrcเพื่อรวม

ตั้งค่าเสร็จสิ้นการละเว้นกรณีบน

จากนั้นใช้^X ^Rเพื่อรีโหลดการกำหนดค่า


30
"เช่นกัน" - /etc/inputrcหรือ~/.inputrcไฟล์ที่กำหนดโดยINPUTRCเป็นสถานที่เท่านั้นที่สามารถไป การป้อนสิ่งนั้นในพรอมต์ Bash จะไม่ทำงาน
เดนนิสวิลเลียมสัน

ขออภัย! คุณพูดถูก :)
John T

10
^X ^Rเพื่อรีโหลดinputrc
grawity

14
@DennisWilliamson: คุณสามารถทำได้bind "set completion-ignore-case on"จากบรรทัดคำสั่ง สำหรับฉันเชื่อว่าเทอร์มินัลเซสชันนั้นเท่านั้น
Clay Bridges

1
ดังนั้นนั่นคือสิ่งที่ msysgit มี แต่ MSYS2 ขาด! ที่นี่ฉันพยายามที่จะหามันในเช่น / etc / profile ...
SamB

111

การปรับโครงสร้างหนี้กับประโยชน์ของการหวนเพื่อความคมชัดข้อดีและข้อเสียของการใช้กับ[.]inputrc เคล็ดลับของหมวกเพื่อขีดล่างเพื่อขอความช่วยเหลือ.bash_profile

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

การเสมอทำให้กรณีตายแท็บแล้วเสร็จในทุบตี:


ตัวเลือก A:หากคุณมีอยู่แล้ว:

  • /etc/inputrcไฟล์ (ใช้ทั้งระบบการปรับเปลี่ยนต้องใช้sudo)
  • และ / หรือ~/.inputrcไฟล์ (เฉพาะผู้ใช้)

    และ / หรือ

คุณวางแผนที่จะปรับแต่งไลบรารี readline อย่างกว้างขวางและ / หรือต้องการให้การปรับแต่งมีประสิทธิภาพสำหรับสคริปต์เช่นกันเมื่อเรียกread -e:

เพิ่มบรรทัด

set completion-ignore-case on

ไปทั้งไฟล์ขึ้นอยู่กับว่าคุณต้องการตั้งค่าให้มีประสิทธิภาพสำหรับทุกผู้ใช้หรือปัจจุบันของผู้ใช้ (สร้างไฟล์ถ้าจำเป็น)

คำสั่งที่เกี่ยวข้องที่ทำให้ชื่อไฟล์และไดเรกทอรีเสร็จง่ายขึ้นคือ:

set show-all-if-ambiguous on

สิ่งนี้ทำให้ไม่จำเป็นต้องกด Tab สองครั้งเมื่อมีการแข่งขันมากกว่าหนึ่งรายการ


ตัวเลือก B:หรือคุณอาจเพิ่มคำสั่ง Readline ไปยัง~/.bash_profileไฟล์เฉพาะผู้ใช้ของคุณบน OS X (หรือ~/.bashrcบน Linux) โดยส่งพวกเขาเป็นอาร์กิวเมนต์เดียวไปยังbindบิวด์อิน :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

โปรดทราบว่าbindคำสั่งใน~/.bash_profile/ ~/.bashrcมีความสำคัญกว่าคำสั่งเทียบเท่าทั้งในหรือ/etc/inputrc~/.inputrc

ตามที่ระบุไว้ข้างต้นการกำหนดค่า Readline ที่กำหนดด้วยวิธีนี้จะไม่มีผลในสคริปต์ที่เรียกread -eใช้เพื่อเปิดใช้งานการสนับสนุน Readline สำหรับการอ่านอินพุตของผู้ใช้


10
แสดงทั้งหมดถ้าไม่ชัดเจนนั้นดีมาก! ฉันมักจะสงสัยว่าทำไมพวกเขาทำให้ฉันแท็บสองครั้งเพื่อดำเนินการดังกล่าว บันทึกการกดแป้นหลายพันครั้งในอนาคตของฉัน! ขอบคุณ!
user34112

4
เยี่ยมมากมันใช้งานได้กับcdคำสั่ง ซึ่งแก้คำถามนี้และจะช่วยฉันกดแป้นพิมพ์นับพันด้วย :)
hoosierEE

1
show-all-if-ambiguousอีกจุดที่ดี อย่างไรก็ตามเนื่องจากคุณพูดว่า "เป็นทางเลือก" จริง ๆ แล้วมีประโยชน์ในการทำสิ่งนี้ผ่านทางbindเมื่อinputrcไฟล์ดูเหมือนจะทำให้ไม่จำเป็นที่?
underscore_d

1
@underscore_d: คำถามที่ดี; โปรดดูคำตอบที่อัปเดตของฉัน
mklement0

1
เจ๋งขอบคุณ! ใน Debian 8.2 ฉันไม่มีinputrcแต่ก็สร้าง~/.inputrcและเพิ่มสิ่งเหล่านี้อย่างมีความสุขรวมถึงคำสั่งที่เป็นประโยชน์อื่น ๆ ฉันเดาว่าเราสมมติว่าผู้อ่านทุกคนรู้ว่า/etc/inputrc มีผลกระทบต่อผู้ใช้รายอื่น (เว้นแต่จะมีการแทนที่การตั้งค่าที่ได้รับผลกระทบ) ขณะที่เรากำลังพูดถึง caveats;)
underscore_d

1

เพื่อหลีกเลี่ยงการเปลี่ยนการกำหนดค่าสำหรับผู้ใช้ทั้งหมดและเพื่อหลีกเลี่ยงการอนุญาตให้ใช้รูทต่อไปนี้:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

จากนั้นลงชื่อเข้าใช้ใหม่หรือโหลดใหม่ ~ / .inputrc

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