Bash: กดหลบหนี 4 ครั้ง


11

เมื่อฉันกด escape 4 ครั้งในเทอร์มินัล bash มันจะแสดงดังนี้:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

คุณลักษณะนี้คืออะไรและมีการค้นพบรายการเหล่านี้อย่างไร (ในการกด esc ครั้งที่สองเทอร์มินัลจะส่งเสียงเตือน)

คำตอบ:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

นี้แสดงให้เห็นว่าเริ่มต้นที่สำคัญของการมีผลผูกพันMeta+Esc(และCtrl+i) ใน Emacs completeบรรทัดคำสั่งโหมดการแก้ไขเป็นฟังก์ชัน โดยMetaปกติคีย์จะEscอยู่บนแป้นพิมพ์โดยไม่มีMetaคีย์ที่ชัดเจน เอกสารประกอบ Readline สำหรับฟังก์ชันนี้ระบุว่า

พยายามดำเนินการจนเสร็จสิ้นกับข้อความก่อนจุด ความสมบูรณ์จริงที่ดำเนินการเป็นเฉพาะแอปพลิเคชัน ตัวอย่างเช่น Bash พยายามทำให้ข้อความเป็นตัวแปร (หากข้อความขึ้นต้นด้วย$), ชื่อผู้ใช้ (หากข้อความขึ้นต้นด้วย ~), ชื่อโฮสต์ (หากข้อความขึ้นต้นด้วย@) หรือคำสั่ง (รวมถึงนามแฝงและฟังก์ชั่น) หากไม่ตรงกับสิ่งเหล่านี้จะพยายามสร้างชื่อไฟล์ให้สำเร็จ ในทางกลับกัน Gdb อนุญาตให้ทำหน้าที่ของโปรแกรมและตัวแปรให้เสร็จสิ้นและจะพยายามเติมชื่อไฟล์ให้สำเร็จในบางสถานการณ์


เกี่ยวกับความคิดเห็นของคุณต่อคำตอบของ Anthon : ไม่การกดEscสองครั้งไม่เหมือนกับการกดTabทั่วไป (เว้นแต่จะอยู่ในโปรแกรมที่จับคู่พวกเขากับการกระทำเดียวกันโดยที่ Readline เป็นค่าเริ่มต้น) อย่างไรก็ตามCtrl+i เป็นเช่นเดียวกับTabเช่นเดียวกับที่เป็นเช่นเดียวกับCtrl+[ Escซึ่งหมายความว่าคุณสามารถทำเสร็จด้วยCtrl+[ Ctrl+[ในbashกรณีที่คุณต้องการตราบเท่าที่สองครั้งที่Escถูกผูกไว้กับ Readline completeฟังก์ชั่น สิ่งนี้มีประโยชน์หากคุณกำลังทำงานที่เทอร์มินัล VT220 เช่นซึ่งไม่มีรหัส Escape:

แป้นพิมพ์ VT220 ภาษาเยอรมัน


Kusalananda ขอบคุณสำหรับคำตอบเชิงลึกนี้ เกี่ยวกับประเด็นสุดท้ายของคุณ: ทำไมกดEscสองครั้ง (หรือ\M-\e) ไม่เหมือนกับTabใน bash หากทั้งสองทำเสร็จ?
flow2k

1
@ flow2k มันจะเหมือนกันถ้าทั้ง Esc-Esc และ Tab ถูกผูกไว้กับcompleteฟังก์ชั่นซึ่งเป็นค่าเริ่มต้น แต่ไม่ใช่โดยทั่วไป (เช่นการกดปุ่มไม่ใช่ "เหมือนกัน") คุณไม่สามารถแทนที่แท็บด้วย Esc-Esc ได้ทุกที่เฉพาะในโปรแกรมที่สามารถอ่านได้ อย่างไรก็ตามคุณสามารถแทนที่ Tab ด้วย Ctrl-i หรือ Esc ด้วย Ctrl- ได้ทุกที่
Kusalananda

ติดตามถ้าผมอาจจะ: ผมไม่เห็นในการส่งออกของTab bind -pทำไมถึงเป็นอย่างนั้น? อาจTabเป็นเพราะ"hardcoded" และไม่สามารถผูกไว้ได้?
flow2k

1
@ flow2k ไม่แท็บเหมือนกับ Ctrl-i \C-iมองหา นี่คือการเทียบเท่าในระดับฮาร์ดแวร์
Kusalananda

8

ที่เรียกว่าการเสร็จสิ้นไฟล์และถ้าคุณไม่มีคำสั่งก่อนหน้านี้ใน commandline, ทุบตีจะเสนอให้คุณทำตามคำสั่ง 2837 ทั้งหมดที่รู้เกี่ยวกับ, ทั้งในตัวและที่พบใน PATH

เรียงตามลำดับ


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