วิธีนำทางภายในการค้นหาแบบย้อนกลับของ bash


40

ข้อเสนอทุบตีทำงานเพื่อค้นหากลับผ่าน+Ctrl Rจากนั้นหนึ่งสามารถพิมพ์ในส่วนหนึ่งของคำสั่งมันจะแสดงรายการที่เหมาะสมจากประวัติศาสตร์

สมมติว่านี่เป็นประวัติของฉัน:

vim foo1
vim foo2 # I want to go here
vim foo3 # this is where I land, how to go back?

fooฉันค้นหา กดปุ่มCtrl+ Rอีกครั้งจะแสดงรายการค้นหาที่เหมาะสมถัดไป บ่อยครั้งที่มันเกิดขึ้นกับผมว่าผมเร็วเกินไปและการสำรวจที่ผ่านมาผลตั้งใจของฉันและแสดงให้เห็นและตอนนี้ฉันต้องการที่จะกลับไปvim foo3vim foo2

ดังนั้นคำถามของฉันคือฉันจะนำทางภายในการค้นหาแบบย้อนกลับได้อย่างไร


เทอร์มินัลใดที่คุณใช้ เช่น. gnome-terminal, konsole, อื่น ๆ ...
varesa

1
ดีผมไม่ชินกับมัน ... ที่สำคัญควรจะ Ctrl + S แต่ขั้วบางดูเหมือนจะกินที่สำคัญก่อนที่จะถึงกลับค้นหา
varesa

Ctrl + shift + R - ค้นหาไปข้างหน้าขณะที่ ctrl + R
devansvd

ที่เกี่ยวข้อง: unix.stackexchange.com/questions/73498/ …
k0pernikus

ที่เกี่ยวข้อง: stackoverflow.com/questions/791765/…
k0pernikus

คำตอบ:


36

คุณสามารถเข้าถึงนี้ผ่านทางฟังก์ชั่นซึ่งเป็นที่ผูกต่อค่าเริ่มต้นforward-search-history ctrl+sน่าเสียดายที่ctrl+sใช้เพื่อส่งสัญญาณxoffตามค่าเริ่มต้นซึ่งหมายความว่าคุณไม่สามารถใช้เพื่อเปลี่ยนทิศทางของการค้นหา มีวิธีแก้ไขสองวิธีสำหรับการแก้ปัญหาคือปิดการใช้งานการส่งxoff/xonสัญญาณและอีกวิธีหนึ่งเปลี่ยนการผูกคีย์สำหรับforward-search-history

ปิดใช้งาน xon / xoff

เรียกใช้stty -ixonใน terminal ~/.bashrcของคุณหรือเพิ่มไปยังคุณ สิ่งนี้อนุญาตให้คุณใช้ctrl+sเพื่อใช้forward-search-historyฟังก์ชันประวัติ

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับผังการควบคุมดูที่วิธีการยกเลิกการตรึงหลังจากกด Ctrl-S ในเทอร์มินัลโดยไม่ได้ตั้งใจ และคำตอบบางส่วน

เปลี่ยนปุ่มลัด

หากคุณไม่ต้องการที่จะเปลี่ยนพฤติกรรมเริ่มต้นของctrl+sคุณสามารถเปลี่ยนปุ่มลัดสำหรับกับforward-search-history bindเนื่องจากคีย์ส่วนใหญ่มีการกำหนดไว้ใน bash แล้วคุณอาจต้องสร้างสรรค์:

bind "\C-t":forward-search-history

สิ่งนี้จะเชื่อมโยงctrl+tกับการส่งต่อการค้นหาประวัติ แต่โปรดทราบว่าการctrl+tเรียกใช้เริ่มต้นต่อหนึ่งรายการtranspose-chars


ฉันพยายามแก้ปัญหาครั้งแรกของคุณstty -ixonในzshและมันได้ผลดีมาก อย่างไรก็ตามมีผลข้างเคียงที่ไม่พึงประสงค์ในการปิดใช้งานการxoff/xonส่งสัญญาณหรือไม่?
นักเรียน

@ นักเรียนคุณไม่สามารถใช้ctrl+sหยุดการแสดงผลเทอร์มินัลได้อีกต่อไป หากคุณไม่เคยใช้มันมาก่อนจะไม่มีปัญหา
Ulrich Dangel

1
สำหรับสิ่งที่คุ้มค่าฉันไปกับโซลูชันที่สอง สิ่งที่ยอดเยี่ยม! ฉันไม่เคยรู้เลยว่าคุณสามารถตรึงคอนโซลได้โดยการกดC-s.. มีประโยชน์มากเมื่อใช้หางบนบันทึกเซิร์ฟเวอร์ เรียบร้อยแล้ว! (ฉันหวังว่าฉันจะมีการโหวตอีกครั้ง :))
Ashutosh Jindal

ฉันไม่สามารถรับตัวเลือก # 2 เพื่อทำงานกับ OSX ฉันต้องทำสิ่งนี้แทน:bind '"\C-t": history-search-forward'
stiemannkj1

0

เป็นทางเลือกแทนการค้นหาแบบย้อนกลับขั้นพื้นฐานและการค้นหาแบบส่งต่อที่จัดทำโดย bash ของคุณคุณอาจต้องการ:

fzfคำอธิบายตัวค้นหา "บรรทัดคำสั่งฟัซซี่ค้นหา" ด้วยตนเอง

มันสามารถแทนที่การค้นหาย้อนกลับเริ่มต้นของ bash ของคุณ (และเทอร์มินัลอื่น ๆ )

ประโยชน์ของมันคือมัน:

  • พิมพ์รายการคำสั่งของคุณจากประวัติ
    • สลับการเรียงลำดับตามลำดับเวลาหรือความเกี่ยวข้องโดยกดปุ่ม Ctrl + R อีกครั้ง
  • สามารถนำทางผ่านปุ่มลูกศร (หรือ Ctrl + J / Ctrl + K)
  • อนุญาตให้ค้นหาหลายเข็ม

เวิร์กโฟลว์ของฉันใช้ fzf อย่างสมบูรณ์ในการค้นหาย้อนกลับพื้นฐานบนเครื่องที่ฉันควบคุม

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