ฉันจะเปลี่ยน bash history เสร็จสิ้นเพื่อทำสิ่งที่มีอยู่แล้วได้อย่างไร


136

ฉันพบคำสั่งเมื่อสองสามเดือนก่อนที่ทำให้ประวัติ bash ของฉันสมบูรณ์โดยอัตโนมัติในสิ่งที่มีอยู่แล้วในบรรทัดเมื่อกดลูกศรขึ้น:

$ vim fi

กด

$ vim file.py

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

ไม่มีใครรู้คำสั่ง?

คำตอบ:


228

น่าจะเป็นสิ่งที่ชอบ

# ~ / .inputrc
"\ e [A": ประวัติการค้นหาย้อนหลัง
"\ e [B": history-search-forward

หรือเทียบเท่า

# ~ / .bashrc
ถ้า [[$ - == * i *]]
แล้ว
    ผูก '"\ e [A": history-search-backward "
    ผูก '"\ e [B": history-search-forward "
fi

(คำสั่ง if ตรวจสอบโหมดโต้ตอบ)

โดยปกติการขึ้นและลงจะถูกผูกไว้กับฟังก์ชัน Readline previous-historyและnext-historyตามลำดับ ฉันชอบที่จะผูก PgUp / PgDn กับฟังก์ชันเหล่านี้แทนที่จะแทนที่การทำงานปกติของขึ้น / ลง

# ~ / .inputrc
"\ e [5 ~": ประวัติการค้นหาย้อนหลัง
"\ e [6 ~": history-search-forward

หลังจากคุณแก้ไข~/.inputrcให้รีสตาร์ทเชลล์ของคุณหรือใช้Ctrl+ X, Ctrl+ Rเพื่อบอกให้อ่าน~/.inputrcซ้ำ


อย่างไรก็ตามหากคุณกำลังมองหาเอกสารที่เกี่ยวข้อง:

Bash ใช้GNU Readline Libraryสำหรับเชลล์พร้อมต์และประวัติ


ขอบคุณสำหรับคำตอบ. ฟังดูคุ้นเคย แต่น่าเสียดายที่ไม่ได้ผลสำหรับฉัน การวางไว้ใน. inputrc ไม่เปลี่ยนแปลงอะไรเลยและใส่ลงใน. bashrc จะหยุดลูกศรไม่ให้ทำอะไร ความคิดใด ๆ ?
blokkie

ไม่เป็นไร. history-complete- * ไม่มีอยู่; มีเพียงฟังก์ชัน history-search- * เท่านั้น ขอบคุณ!
blokkie

อ๊ะฉันพิมพ์สองตัวอย่างแรกผิดอย่างเห็นได้ชัด ... อันสุดท้ายถูกต้อง ฉันจะแก้ไขมัน
ephemient

@ user1037114: นี่เป็นคำถามในตัวเองคุณควรถามในโพสต์ของตัวเอง
kamaradclimber

สิ่งนี้แก้ไขลูกศรขึ้น / ลงสำหรับฉันโดยใช้โหมด vi ใน bash หมายเหตุฉันต้องกด "Esc" (โหมดคำสั่ง) เพื่อให้ใช้งานได้
คริส

5

อัปเดต .inputrc ดังต่อไปนี้:

"\C-[OA": history-search-backward
"\C-[[A": history-search-backward

"\C-[OB": history-search-forward
"\C-[[B": history-search-forward

4
กุญแจเหล่านั้นคืออะไร?
คริส

ฉันไม่รู้ว่าคีย์เหล่านี้คืออะไรโดยเฉพาะ แต่คำตอบนี้แก้ไขฟังก์ชันนี้ให้ฉันเมื่อคีย์ขึ้นและลงไม่ทำการค้นหาประวัติขณะใช้ tmux และ st terminal บน X11
razzintown

1
@razzintown เซนต์คุณอาจจะมีset enable-keypad onสำหรับdelกุญแจสำคัญในการทำงานอย่างถูกต้อง ( FAQ ) เมื่อปุ่มกดอยู่บนปุ่มลูกศรคือ"\C-[OA"และ"\C-[OB"( "\C-[OC"และ"\C-[OD") ฉันโพสต์คำตอบเพื่อชี้แจงเรื่องนี้
MauricioRobayo

@Chris เหล่านี้เป็นโหมดแป้นพิมพ์ขึ้นและลงปุ่มลูกศรและปุ่มลูกศรขึ้นและลงโหมด ANSI ดูคำตอบของฉันร้อง
MauricioRobayo

3

หากset enable-keypad onอยู่ใน~/.inputrcฐานะผู้ใช้บางคนของคุณ( เทอร์มินัลธรรมดาแบบไม่ต้องดูด ) โปรดทราบว่าปุ่มลูกศรอยู่ในโหมดแป้น Ubuntu มาพร้อมกับประโยชน์นี้/usr/share/doc/bash/inputrc.arrows:

# This file controls the behaviour of line input editing for
# programs that use the Gnu Readline library.
#
# Arrow keys in keypad mode
#
"\C-[OD"        backward-char
"\C-[OC"        forward-char
"\C-[OA"        previous-history
"\C-[OB"        next-history
#
# Arrow keys in ANSI mode
#
"\C-[[D"        backward-char
"\C-[[C"        forward-char
"\C-[[A"        previous-history
"\C-[[B"        next-history
#
# Arrow keys in 8 bit keypad mode
#
"\C-M-OD"       backward-char
"\C-M-OC"       forward-char
"\C-M-OA"       previous-history
"\C-M-OB"       next-history
#
# Arrow keys in 8 bit ANSI mode
#
"\C-M-[D"       backward-char
"\C-M-[C"       forward-char
"\C-M-[A"       previous-history
"\C-M-[B"       next-history

ดังนั้นฉันไม่แน่ใจว่าคุณต้องการทั้งหมดหรือไม่ แต่อาจไม่เจ็บที่จะมี~/.inputrc:

# Arrow keys in keypad mode
"\C-[OA": history-search-backward
"\C-[OB": history-search-forward
"\C-[OC": forward-char
"\C-[OD": backward-char

# Arrow keys in ANSI mode
"\C-[[A": history-search-backward
"\C-[[B": history-search-forward
"\C-[[C": forward-char
"\C-[[D": backward-char

นี่ก็อยู่ในหัวข้อเดียวกันเช่นกัน: ปุ่มเคอร์เซอร์ของฉันไม่ทำงานและปุ่ม xterm: special


1

ด้วย ohmyzsh ให้ใช้สิ่งนี้ในไฟล์ . zshrc :

bindkey '^[OA' history-search-backward
bindkey '^[OB' history-search-forward

เพื่อโหลดใหม่source ~/.zshrcหรือเปิดเทอร์มินัลใหม่

ที่มา: https://superuser.com/a/418299/71680


สิ่งที่ใช้ได้ผลกับฉันใน zsh คือตัวเลือกที่ให้ไว้ในลิงก์ต้นทาง: bindkey '\ e [A' history-search-backward bindkey '\ e [B' history-search-forward
Michael Massey

-3

คุณอาจต้องเปิดใช้งาน bash complete

ตรวจสอบ

  • /etc/profile
  • /etc/bash.bashrc
  • ~/.bashrc

เพื่อดูว่ามีแหล่งที่มาของไฟล์ด้านบนหรือไม่ /etc/bash_completionหรือไม่ กล่าวคือ

. / etc / bash_completion

ถ้า /etc/bash___completionไม่มีที่มาจากไฟล์ใด ๆ ข้างต้นคุณจะต้องเพิ่มลงในไฟล์ใดไฟล์หนึ่ง

หากคุณต้องการผู้ใช้ทุกคนทุบตีบนเครื่องของคุณจะมีการดำเนินการเสร็จสมบูรณ์ทุบตีแหล่งที่มาจาก/etc/bash_completion/etc/bash.bashrc

หากเป็นเพียงคุณที่ต้องการทุบตีให้เสร็จสมบูรณ์แหล่งที่มา/etc/bash_completionจาก~/.bashrcไฟล์.


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