จะส่งต่อประวัติการค้นหาด้วยคำสั่ง reverse-i-search (ctrl + r) ได้อย่างไร


12

ในคู่มือ readline

# man readline

ข้อมูลต่อไปนี้อธิบายวิธีค้นหาย้อนหลังและไปข้างหน้า

reverse-search-history (C-r)
Search backward starting at the current line and moving `up' through the history as necessary.  This is an incremental search.

forward-search-history (C-s)
Search forward starting at the current line and moving `down' through the  history  as  necessary.   This  is  an  incremental search.

เมื่อฉันกด ctrl + r และพิมพ์ "apt-get" ฉันสามารถย้อนกลับประวัติการค้นหาโดยแตะ ctrl + r อย่างต่อเนื่อง แต่จากนั้นฉันก็แตะ ctrl + s และเทอร์มินัลไม่ไปข้างหน้า ฉันกำลังทำอะไรผิดหรือเปล่า?

คำนำหน้า Meta "M-" มีความหมายว่าอย่างไร?

คำตอบ:


15

ลำดับC-sถูกนำมาจากไดรเวอร์เทอร์มินัลอย่างที่คุณเห็น

stty -a | grep '\^S'

หากต้องการเพิ่มลำดับสำหรับการใช้งานโดย readline ให้ตั้งค่าลำดับสถานีหยุดเป็นลำดับอื่น ๆ เช่น

stty stop ^J

หรือลบออกพร้อมกับ

stty stop undef

หลังจากนั้นC-sจะทำงานในสถานีที่กำหนด

ตั้งไว้~/.bashrcเพื่อให้มันทำงานได้ในทุกสถานี

M-ลำดับหมายความว่าAltที่สำคัญตามที่ระบุไว้อยู่แล้ว


^ J เป็นตัวเลือกที่ดีเนื่องจากstopไม่มีการใช้กับสิ่งอื่น
hobs

3

นอกเหนือจากการกำหนด 'หยุด' ถ่าน TTY ที่แตกต่างกันตามที่แนะนำข้างต้นคุณสามารถลบออกได้ทั้งหมดหากคุณไม่ได้วางแผนที่จะใช้ (ฉันมักจะไม่ทำ) เช่นนี้:

$ stty stop undef

จากนั้น readline สามารถใช้ control-s สำหรับการค้นหาไปข้างหน้าและคุณจะไม่ได้รับพฤติกรรมแปลก ๆ เนื่องจากมีการเพิ่มตัวหยุดแบบใหม่


นี่เป็นวิธีที่ดีกว่ามาก
A.Danischewski

1

forward-search-history (Cs) ไม่ทำงาน (แม้ว่าจะอยู่ในหน้า man)

'M-' หมายถึงตัวปรับแต่งปุ่ม Alt


1
ไม่ถูกต้องC-sส่วนดูคำตอบของฉัน
enzotib

0

กรุณาอย่าใช้:

stty stop ^J

แต่

stty stop ^P

หรือสิ่งอื่นใดตามที่^Jทำให้เกิดปัญหาใหญ่กับ ssh (ฉันไม่รู้ว่าทำไมต่อไป) หลังจากฉันลงชื่อเข้าใช้Enterและแบ็กสแลชไม่ทำงาน หรือฉันต้องพิมพ์:

stty sane 
export TERM=linux

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

ssh root@192...

ดังนั้น

stty stop ^P

แก้ไขปัญหาทั้งสองในเวลาเดียวกัน



0

หากต้องการสลับไปข้างหน้าเมื่อใช้การค้นหาย้อนกลับ (ด้วยคำสั่ง Ctrl-R):

  1. เปิดไฟล์. bashrc ของคุณ:
    sudo gedit ~/.bashrc

  2. เพิ่มบรรทัดนี้ (ตัวอักษร "f" สามารถถูกแทนที่ด้วยอันที่ยังไม่ได้ใช้โดยระบบ)

    bind '"\C-f": forward-search-history' 
    
  3. ปิดไฟล์ของคุณและอัพเดต. bashrc ของคุณ (หรือเปิดเทอร์มินัลอื่น) ด้วยคำสั่ง:
    source ~/.bashrcหรือ. ~/.bashrc

ตอนนี้คุณสามารถเดินหน้าต่อไปในประวัติศาสตร์ด้วยปุ่มลัด: Ctrl + f

ทำงานบน Ubuntu 18.04 LTS


0

โปรดทราบว่าฉันได้ใช้

stty stop ^J
stty -ixoff

ใน. bashrc เพื่อเปิดใช้งานการค้นหาไปข้างหน้าและปิดการใช้งานข้อความ "Output ถูกระงับชั่วคราวโดยการกด Ctrl + S กด ​​Ctrl + Q เพื่อดำเนินการต่อ" ข้อความใน Konsole เมื่อกด ctrl + s แต่ทั้งสองคำสั่งแยกการรวม Konsole ใน Dolphin ช็อตคัต "F4") ในแบบที่ฉันต้องทำ ctrl + c สองครั้งเพื่อให้มันทำงานได้และคำสั่ง "cd" อัตโนมัติที่ไม่ถูกฉีดเมื่อนำทางแบบกราฟิก

ดังนั้นตอนนี้ฉันชอบ:

stty stop undef
stty -ixon

มันมีผลเหมือนกันทุกคนดูเหมือนจะทำงานได้ตามที่คาดไว้;)

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