มีวิธียกเลิกการแก้ไขประวัติทุบตีหรือไม่?


9

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

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

ประวัติความเป็นมาในขณะนี้แสดงให้เห็นว่าคำสั่งที่สองคือไม่echo d echo bฉันจะเก็บแรกecho bในประวัติศาสตร์ได้อย่างไร

ตัวอย่างเช่นสมมติว่าฉันรันคำสั่งที่ยาวมากพร้อมด้วยตัวเลือกมากมาย จากนั้นฉันต้องการเรียกใช้อีกครั้งโดยมีการเปลี่ยนแปลงเล็กน้อยดังนั้นฉันจึงย้อนกลับไปในประวัติศาสตร์เพื่อค้นหาทำการเปลี่ยนแปลง แต่แล้วตระหนักว่าจริง ๆ แล้วฉันไม่จำเป็นต้องเรียกใช้อีกครั้งโดยคิดถึงตัวเลือกอื่น ทำแทน หลังจากนั้นฉันต้องการกลับไปและเตือนตัวเองว่าคำสั่งที่ฉันใช้คืออะไร - แต่เดี๋ยวก่อนประวัติศาสตร์กำลังแสดงสิ่งที่ผิด!

สิ่งนี้เกิดขึ้นน้อยมาก แต่เมื่อไหร่ที่ฉันพบว่ามันน่ารำคาญจริงๆ มีวิธีการเก็บประวัติดั้งเดิมโดยอัตโนมัติหรือไม่?


1
ด้วยhistoryคุณสามารถดูคำสั่งทั้งหมด หลังจากที่คุณสามารถเลือกสิ่งที่คุณต้องการ คุณใช้เชลล์รุ่นไหนอยู่ตอนนี้
Hastur

6
ฉันทำซ้ำไม่ได้ ถ้าฉันเปลี่ยน c เพื่อ d กด CTRL + C และกดปุ่ม [ขึ้น] echo cอีกครั้งก็ยังกล่าวว่า
Martin von Wittich

คำตอบ:


6

ลองใส่ของคุณ ~/.inputrc

 set revert-all-at-newline on

ในบางกรณีคุณสามารถค้นหาได้ในค่าเริ่มต้น (ปิด)
ควรบังคับreadlineให้เลิกทำการเปลี่ยนแปลงทั้งหมดกับประวัติบรรทัดก่อนส่งคืนเมื่อaccept-lineมีการดำเนินการ (ข้อมูลเพิ่มเติมในman bash)

แก้ไข:
CTRL+cและปรับการทำงานตั้งแต่ set revert-all-at-newline onbash-4.3.30

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

แต่:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

ดีนี่เป็นทางออกที่ดีกว่า ที่น่าสนใจ CTRL-c จะทำให้ค่าจดจำนั้นถูกแก้ไขแม้ว่าการลบบรรทัดหรือลูกศรลงอย่างสมบูรณ์แล้วกด enter หรือเรียกใช้คำสั่งอื่นจะเรียกคืนประวัติ
Dean Serenevy

@DeanSerenevy: ขอบคุณที่ฉันได้เช่นการแก้ปัญหาของคุณมากเกินไปและฉันเริ่มใช้ CTRL-ในnanoเกินไป :-)
แฮสเธอร์

4

ปกติ:

CTRL-a # ENTER

จะทำมัน

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

echo aในตัวอย่างของคุณแล้วคุณจะมีในประวัติของคุณ: echo b, echo c, # echo d,


1
คุณสามารถกดเพื่อแสดงความคิดเห็นออกบรรทัดคำสั่งปัจจุบันถ้าทุบตีคุณใช้ alt-shift-3 ใน(หรือ) สำหรับข้อมูลเพิ่มเติม readline/insert-commentman 3 readlineman bash
cychoi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.