ค้นหาประวัติทุบตี + ลูกศรขึ้นบางส่วน


146

ฉันค้นหาแล้ว แต่ไม่พบสิ่งใดในสิ่งนี้ ฉันกำลังมองหาฟังก์ชั่นในการทุบตีโดยใช้สถานี

ย้อนกลับไปเมื่อฉันมีผู้ใช้ในระบบเดเบียนและเพื่อนตั้งค่าฉันด้วยคุณสมบัติการค้นหาประวัติที่สะดวกสบาย (ฉันเชื่อว่าฉันใช้ tcsh แล้ว) ซึ่งฉันจะพิมพ์จุดเริ่มต้นของคำสั่งก่อนหน้ากดลูกศรขึ้น และมันจะทำการค้นหาตามสตริงบางส่วน

เช่นถ้าประวัติของฉันคือ:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

และฉันพิมพ์และกดปุ่มลูกศรขึ้นก็จะแสดงให้ฉัน:. ./script.pl arg1กดอีกครั้งและมันจะแสดง./script.plฯลฯ

มากเหมือนมันจะดำเนินการgrepใน. bash_history มีวิธีรับฟังก์ชั่นนี้หรือไม่?



1
@Marcel ดูเหมือนว่าอาจเป็นคำตอบเดียวกันฉันเห็นว่าในการค้นหา แต่ไม่ได้เชื่อมต่อกับคำถามของฉันด้วยคำหลัก iPython และ Shell
TLP

เสียงเช่นนี้ - github.com/zsh-users/zsh-autosuggestions
slm

คำตอบ:


197

ใส่บรรทัดต่อไปนี้ในของคุณ~/.inputrc:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

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


ข้อมูลพื้นหลังเล็กน้อย:

Bash ใช้readlineเพื่อจัดการกับพรอมต์ ~/.inputrcเป็นไฟล์กำหนดค่าสำหรับ readline โปรดทราบว่านี้จะมีผลบังคับใช้ในซอฟต์แวร์อื่น ๆ การใช้ห้องสมุด ReadLine เช่นIPython

อ่านคู่มือทุบตีสำหรับข้อมูลเพิ่มเติมเกี่ยวกับ readline คุณยังสามารถค้นหาคำสั่ง readline ที่เกี่ยวข้องกับประวัติเพิ่มเติมได้อีกด้วย

ในการรับรหัส Escape สำหรับปุ่มลูกศรคุณสามารถทำสิ่งต่อไปนี้:

  1. เริ่มcatในเทอร์มินัล (เพิ่งcatไม่มีข้อโต้แย้งเพิ่มเติม)
  2. พิมพ์ปุ่มบนแป้นพิมพ์คุณจะได้รับสิ่งต่าง ๆ เช่น^[[Aลูกศรขึ้นและ^[[Bลูกศรลง
  3. แทนที่ด้วย^[\e

1
เยี่ยมมาก แต่โซลูชันนี้ปิดใช้งานทางลัดลัด ctrl-left / ctrl-right
Eyal

ทุกคนสามารถบอกฉันได้ว่าฉันจะทำสิ่งเดียวกันให้สำเร็จได้อย่างไร
Hitesh Kumar

@lesmana ฉันจะให้คะแนนพิเศษสำหรับแมวส่วนเดียว
Mike D

Seconding @Eyal ทุกคนมีคำแนะนำเกี่ยวกับวิธีที่ฉันสามารถมี แต่รักษาทางลัด ctrl-left / ctrl-right
kbrose

6
เพื่อรักษาค่าเริ่มต้นทั้งหมดเพิ่ม$include /etc/inputrcโดยเฉพาะอย่างยิ่งในบรรทัดแรก
Tulio Casagrande

31

สร้างไฟล์ชื่อ setup_readline.sh ด้วยโหมด 644 ใน /etc/profile.d/ โดยมีเนื้อหาดังต่อไปนี้ล็อกอินและตรวจสอบรหัสที่คุณต้องการ:

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-forward'

ฉันคิดว่าเป็นวิธีที่ดีที่สุดในการทำเช่นนี้ ส่วนใหญ่ถ้าคุณใช้ระบบจัดการการกำหนดค่าเช่น chef, puppet เป็นต้น

และการกำหนดค่าระบบยังคงไม่มีใครแตะต้อง!


4
ผิดปกติ ~ / inputrc ไม่ทำงานสำหรับฉัน - แต่ใส่คำสั่งเหล่านี้ลงใน. bash_profile
Joe

1
.inputrc ไม่มีอยู่ในโฟลเดอร์บ้านของฉันและฉันชอบที่จะตั้งค่าประเภทนี้ใน. bashrc ต่อไปดังนั้นฉันสามารถพกไฟล์หนึ่งไฟล์สำหรับการตั้งค่าของฉันได้ ดังนั้นนี่อาจเป็นคำตอบที่ดีกว่าจากนั้นให้ยอมรับคำตอบ
Shital Shah

.inputrc ทำงาน fabulously สำหรับฉัน screenแต่ไม่ได้หลังจากที่ผมโหลด สิ่งที่แปลกคือปุ่มลัด. inputrc อื่น ๆ ใช้งานได้ แต่ไม่ใช่ทางลัดเหล่านี้ ตอนนี้ฉันจึงใช้ทั้งสองวิธี
Orwellophile

สิ่งนี้มีประโยชน์มากเมื่อคุณล็อกอินเข้าสู่เซิร์ฟเวอร์เพื่อทำสิ่งต่าง ๆ และขาดหายไปจากสิ่งเหล่านี้และไม่ต้องการแก้ไขและโหลด ~ / .inputrc บนเซิร์ฟเวอร์อีกครั้ง
danmactough

13

Ctrl + R จะให้ฟังก์ชั่นประเภทนี้แก่คุณ เริ่มพิมพ์คำสั่งบางส่วนและมันจะเกิดขึ้นกับคำสั่งเก่าที่คุณสามารถนำทางด้วยลูกศรขึ้นและลง ข้อมูลเพิ่มเติม: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


2
ขอบคุณสำหรับการตอบกลับของคุณ. ใช่ฉันได้ลองแล้ว แต่ฉันพบว่ามันค่อนข้าง ... พิถีพิถัน มันจะไม่อนุญาตให้ฉันเลื่อนดูคำสั่งที่เริ่มต้นด้วยบางส่วนเท่านั้นที่จะแสดงครั้งแรก นอกจากนี้ยังค้นหาคำสั่งทั้งหมดสำหรับอักขระซึ่งไม่มีประโยชน์
TLP

5
@TLP, กดปุ่มซ้ำCtrl+r
akostadinov

4

เพื่อให้คำตอบของ Lesmana เกี่ยวกับ "~ / .inputrc" ที่ฉันควรสร้างภายใต้ Trusty 14.04 ของฉันให้ยืนยัน / เพิ่มใน "~ / .bashrc" (บรรทัดแรกมีอยู่แล้วใน "~ / .bashrc"):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

มันอธิบายแล้วในฝรั่งเศสในhttps://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique


2
คำสั่งนี้โดยทั่วไปจะแนะนำให้ทุบตีต่อท้ายคำสั่งต่อท้ายไฟล์ประวัติทันทีแทนที่จะรอให้เซสชันสิ้นสุด มันมีประโยชน์ถ้าคุณเปิดเทอร์มินัลจำนวนมากและไม่ต้องการหลวมประวัติในที่เดียว แต่ไม่จำเป็น digitalocean.com/community/tutorials/…
Shital Shah

3

บางทีคุณอาจต้องการลองhttps://github.com/dvorka/hstrซึ่งมีการกรองแบบเรียบง่ายและหลายบรรทัดอย่างง่าย ๆ ของประวัติทุบตีซึ่งขึ้นอยู่กับตัวชี้วัด (เมื่อความถี่และความยาวของคำสั่งมีความสำคัญ) - คุณสามารถใช้ ปุ่มลูกศรเพื่อนำทางประวัติศาสตร์ได้อย่างง่ายดาย:

ป้อนคำอธิบายรูปภาพที่นี่

สามารถผูกกับCtrl-rและ / หรือCtrl-s


0

โซลูชันต่อไปนี้รวม & ขยายวิธีการที่กล่าวถึงข้างต้นบางส่วน: เพิ่มบรรทัดต่อไปนี้ใน~/.bash_aliasesไฟล์ของคุณ(ไม่จำเป็นต้องใช้~/.inputrc) เพื่อให้บรรลุพฤติกรรมดังต่อไปนี้:

  1. เลื่อนขึ้น / ลงในประวัติศาสตร์ (เฉพาะรายการที่มีคำนำหน้าเหมือนกัน) โดยกด CTRL + UP และ CTRL + DOWN สิ่งนี้สามารถอยู่ร่วมกับการทำงานมาตรฐานของการเลื่อนขึ้น / ลงในประวัติเต็มผ่านทางขึ้นและลงเพียงอย่างเดียว
  2. ข้ามไปยังคำถัดไป / ก่อนหน้าใน commandline โดยกด CTRL + RIGHT และ CTRL + LEFT
bind '"\e[1;5A":history-search-backward'
bind '"\e[1;5B":history-search-forward'
bind '"\e[1;5C":forward-word'
bind '"\e[1;5D":backward-word'

ล็อกอินเข้าสู่เชลล์อีกครั้ง (หรือเรียกใช้source ./bash_aliases) เพื่อใช้การเปลี่ยนแปลง

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