ค้นหาคำสั่งก่อนหน้าด้วยคำนำหน้าเหมือนกันเมื่อฉันกดขึ้นที่ shell prompt


19

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

ฉันไม่ทราบวิธีการเปิดใช้งานคุณสมบัตินี้ใน Linux Debian หรือ CentOS ซึ่งบังคับให้ฉันพิมพ์ทั้งหมดคนสามารถช่วยได้


7
นั่นเป็นหน้าที่ของเชลล์ไม่ใช่เทอร์มินัล คุณใช้เชลล์รุ่นใดใน FreeBSD คุณอาจได้รับเชลล์ (หรือคล้ายกัน) ที่เหมือนกันสำหรับ Linux
cjm

ฉันใช้เปลือก tcsh
Abdelilah Benaou

2
ฉันใช้ tcsh ภายใต้ OS X และไม่ได้มีพฤติกรรมที่มีประโยชน์นี้มอง ... หลังจากบางค้นหาฉันพบว่าฉันสามารถเปิดใช้งานได้โดยการใส่bindkey -k (up|down) history-search-(back|for)wardในของฉันตามที่อธิบายไว้ที่นี่.tcshrc เย็น!
Garrett Albright

คำตอบ:


34

เพิ่มไปยังต่อไปนี้เพื่อ~/.inputrc:

# Press up-arrow for previous matching command
"\e[A":history-search-backward
# Press down-arrow for next matching command
"\e[B":history-search-forward

คำอธิบาย

~/.inputrcไฟล์การกำหนดค่าสำหรับGNU ReadLine เชลล์จำนวนมากรวมถึงbashและtcshใช้ readline สำหรับการแก้ไขบรรทัดคำสั่ง สองบรรทัดด้านบนจะบอกให้ readline เรียกใช้ฟังก์ชันการค้นหาประวัติเมื่อพบลำดับการหลีกเลี่ยงสำหรับปุ่มลูกศรขึ้น ( \e[A) และปุ่มลูกศรลง ( \e[B)


ฉันชอบที่จะเพิ่ม F12เพื่อใส่คำสุดท้ายของบรรทัดสุดท้ายไปยังจุดสิ้นสุดของคำสั่งปัจจุบัน Last wordมักจะเป็นเส้นทางที่ฉันต้องการลองใช้ในความคิดโบราณต่างๆ และShift F12เพื่อให้ฉันกลับไปแก้ไขบรรทัดสุดท้ายทั้งหมดตั้งแต่ต้น ~/.inputrcเป็นเครื่องมือที่มีประโยชน์
jalanb

กะ F12 หนึ่งต้องใช้โหมด vi
jalanb

6

สิ่งที่เกิดขึ้นคือ FreeBSD และ Linux ใช้เชลล์ที่แตกต่างกันตามค่าเริ่มต้น ค่าเริ่มต้นของ FreeBSD จะtcshซึ่งมีคุณลักษณะแบบโต้ตอบดีกว่าทุบตีในอดีต ( แต่ทุบตีได้จับขึ้นไป) แต่คุณสมบัติสคริปต์อย่างเห็นได้ชัดที่เลวร้ายยิ่ง

วิธีที่ตรงไปตรงมาที่สุดเพื่อให้ได้สภาพแวดล้อมที่คุณคุ้นเคยคือการเปลี่ยนเชลล์เป็น tcsh บน Linux โดยมีเงื่อนไขว่ามีการติดตั้ง tcsh ทั่วทั้งระบบ (หากไม่มีให้ขอให้ผู้ดูแลระบบของคุณติดตั้ง) เรียกใช้chsh -s tcshเพื่อเปลี่ยนเชลล์เริ่มต้นของคุณ

หรือคุณสามารถตั้งค่า bash ให้ใช้คำสั่งนี้ ตามค่าเริ่มต้นแล้วลูกศรUpและจะDownนำทางไปตามคำสั่งทั้งหมดในประวัติศาสตร์ไม่ใช่เฉพาะคำสั่งที่ขึ้นต้นด้วยคำนำหน้าที่คุณพิมพ์ หากต้องการเปลี่ยนสิ่งนี้กับพฤติกรรมที่คุณคุ้นเคยให้วางบรรทัดต่อไปนี้ในไฟล์กำหนดค่าเริ่มต้นของ bash ซึ่งอยู่.bashrcในโฮมไดเร็กตอรี่ของคุณ เรียกใช้. ~/.bashrcหรือเริ่มเชลล์ใหม่เพื่ออ่านไฟล์การกำหนดค่าเริ่มต้นอีกครั้ง

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

ลำดับ escape เป็นสิ่งที่เทอร์มินัลของคุณส่งไปยังเชลล์เมื่อคุณกดปุ่มลูกศร Upอาจจะ\eOA(หนีO, A) หรือขึ้นอยู่กับขั้วของคุณและในทำนองเดียวกันสำหรับ\e[ADown

โดยค่าเริ่มต้นทุบตีเสนอการผูกกุญแจที่แตกต่างกันเพื่อค้นหาประวัติคำสั่ง คุณสามารถกดCtrl+ Rจากนั้นป้อนอักขระบางตัวเพื่อค้นหาคำสั่งที่มีสตริงย่อยนี้ที่ใดก็ได้ในบรรทัด กดCtrl+ Sเพื่อไปข้างหน้าแทนการถอยหลัง การค้นหานั้นเพิ่มขึ้น (เช่นเมื่อคุณพิมพ์); Alt+ PและAlt+ Nให้การค้นหาที่ไม่เพิ่มขึ้น

แทนการทุบตีและ tcsh คุณสามารถสลับไป zsh ซึ่งมีคุณสมบัติบางอย่างที่ไม่พบในเปลือกหอยอื่นZsh มีCtrl+ Rและ Ctrl+ Sตามค่าเริ่มต้นเช่นเดียวกับทุบตี ที่จะได้รับUpและDownชอบที่คุณมีใน tcsh ใส่บรรทัดต่อไปนี้ใน~/.zshrc:

bindkey '\eOA' history-beginning-search-backward
bindkey '\e[A' history-beginning-search-backward
bindkey '\eOB' history-beginning-search-forward
bindkey '\e[B' history-beginning-search-forward

หากคุณต้องการใช้เชลล์เดียวกันทุกที่คุณสามารถใช้ bash หรือ zsh ใน FreeBSD ได้เช่นกันหากมีการติดตั้งพอร์ต (ขอให้ผู้ดูแลระบบของคุณอีกครั้ง)


1

tcshพร้อมใช้งานสำหรับลีนุกซ์ส่วนใหญ่ ลองติดตั้งtcshแพคเกจจากนั้นเรียกใช้chsh -s /bin/tcshเพื่อทำให้เป็นเชลล์เริ่มต้น


1
หรือคุณอาจลองเปลี่ยนเป็นการทุบตี (ฉัน)
Keith Thompson

1

คำตอบอื่น ๆ จัดการกับมัน แต่ถ้าคุณต้องการมากขึ้นลองดูที่https://github.com/zsh-users/zsh-history-substring-search

Prezto ( https://github.com/sorin-ionescu/prezto ) เต็มไปด้วยสารพัด zsh


ขอบคุณสำหรับคำตอบโดยที่ฉันยังไม่เห็นว่า zsh มีประโยชน์อะไรมากกว่าทุบตีหรือ tcsh?
Abdelilah Benaou

1
คุณสามารถทำสิ่งพื้นฐานทุกอย่างในเปลือกหอยเหล่านี้ได้ ฉันใช้ zsh เนื่องจากมีการบำรุงรักษา prezto มัดไว้อย่างดี (อาจเป็นตัวเปลี่ยนเกมใหญ่) พร้อมท์ทันที (ซึ่งเป็นคุณสมบัติพิเศษ) และเพราะมันให้ความรู้สึกที่ขัดมากกว่าทุบตี (consiguration และสิ่งของ)
Fuad Saud
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.