iPython Like History Command สำหรับ Shell


24

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

ดังนั้นถ้าคุณทำคำสั่งยาว ๆ เช่นscp -r -P 8000 -l user server.com:~/dir/to/copy ./ตามด้วยคำสั่งอื่น หากคุณเริ่มพิมพ์scpและกด bash จะแสดงคำสั่งที่แสดงมาก่อนแทนที่จะเลื่อนดูประวัติทั้งหมด

มีส่วนขยายเช่นนี้เพื่อทุบตี? หรือมีเชลล์ที่เสนอคุณสมบัติแบบนี้?

คำตอบ:


26

Bash ก็มีคุณสมบัตินั้นเช่นกัน แต่มันไม่ได้เปิดใช้งานโดยค่าเริ่มต้น คุณสามารถผูกมันเพื่อเลื่อนเคอร์เซอร์ขึ้น / ลงโดยการใส่สิ่งนี้ลงใน~/.inputrc:

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

ฉันชอบที่จะผูกไว้กับCtrl+ ขึ้น / ลงแทน:

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

แก้ไข:หากต้องการรักษาctrl+leftและctrl+rightเคลื่อนย้ายไปข้างหน้าและไปข้างหน้าด้วยคำทั้งหมดให้รวมบรรทัดเหล่านี้ไว้ใน~/.inputrcไฟล์:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

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

@zetah ฉันแก้ไขลงในคำตอบการแก้ปัญหาของฉันสำหรับคำว่าย้าย
Wim

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

9

ลองกดCtrl+ Rและพิมพ์ตัวอักษรสองสามตัว มันทำงานในลำดับย้อนกลับเช่นกัน


6

และอย่าลืมทางลัดการขยายประวัติอันน่าอัศจรรย์ในการทุบตี 1

ฉันโพสต์ข้อความที่ตัดตอนมาบางส่วนจาก manpage ในกรณีที่คุณไม่ได้สักบนแขน (หรือจำไว้)

   Event Designators  
       An event designator is a reference to a command line entry in the  his
       tory list.

       !      Start  a  history substitution, except when followed by a blank,
              newline, carriage return, = or ( (when the extglob shell  option
              is enabled using the shopt builtin).
       !n     Refer to command line n.
       !-n    Refer to the current command line minus n.
       !!     Refer to the previous command.  This is a synonym for `!-1'.
       !string
              Refer to the most recent command starting with string.
       !?string[?]
              Refer  to the most recent command containing string.  The trail‐
              ing ? may be omitted if string is followed immediately by a new‐
              line.
       ^string1^string2^
              Quick  substitution.  Repeat the last command, replacing string1
              with string2.  Equivalent to ``!!:s/string1/string2/'' (see Mod‐
              ifiers below).
       !#     The entire command line typed so far.

ฉันมักใช้ความสามารถในการอ้างถึง 'คำ' สุดท้ายของคำสั่งก่อนหน้า เช่น,

mkdir /foo/shmoo/adir.horribilus.foo
cp file1 file2 file3 file4 !$ 
ls -l !$

ในทั้งสองกรณี!$ตรง/foo/shmoo/adir.horribilus.fooนี้การแข่งขัน


1 ... ซึ่งถูกพรากไปจาก csh เพื่อลดขอบเขตการขโมยคุณสมบัติของ bash หน้า bash man จะกล่าว

   The shell supports a history expansion feature that is similar  to  the
   history  expansion in csh.  

ดังนั้นมัน "คล้ายกัน" ใด ๆ นี้อาจทำลายหรือcsh tcshหรืออะไรก็ตามที่คุณไม่ได้ใช้เพราะคุณไม่ได้ยอดเยี่ยมเท่าที่bashควร


0

มีทางเลือกคล้ายกับที่ @ ak2 กล่าวถึงข้างต้นแต่คุณไม่จำเป็นต้องสร้างไฟล์. inputrc ใหม่

หากคุณมีสิทธิ์ sudo คุณสามารถเปิดใช้งานสิ่งนี้ได้ในไฟล์ / etc / inputrc ในไฟล์นี้คือการตั้งค่าแป้นพิมพ์ต่างๆรวมถึงคุณลักษณะการค้นหาประวัติ (อย่างน้อย 18.04) ส่วนที่ตัดตอนมาจาก / etc / inputrc คือ:

# alternate mappings for "page up" and "page down" to search the history
# "\e[5~": history-search-backward
# "\e[6~": history-search-forward

เพียงแค่แสดงข้อคิดเห็นสองบรรทัดล่างโดยใช้ตัวแก้ไขไฟล์ sudo (เช่น $ sudo vim) และเทอร์มินัลเซสชันใหม่จะมีคุณลักษณะการค้นหาประวัติ (สำหรับผู้ใช้ทั้งหมด)

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