ใน bash ใครจะล้างอินพุตปัจจุบันได้อย่างไร


172

สมมติว่าใน bash คุณเริ่มเขียนคำสั่งเช่น:

$ rm -rf /foo/bar/really/long/path/here

และจากนั้นตระหนักว่าคุณไม่ต้องการดำเนินการนี้หลังจากทั้งหมด มีวิธีล้างอินพุตด้วยการกดปุ่มหนึ่งหรือสองครั้งหรือไม่?

สิ่งที่ฉันทำเมื่อเร็ว ๆ นี้คือการเตรียมเสียงสะท้อนและใส่ข้อมูลในเครื่องหมายคำพูด (Ctrl + A echo ",, Ctrl + E, ") จากนั้นกด Enter มีวิธีที่เร็วกว่านี้ไหม


หรือสมมติว่าคุณวางคำสั่งและรู้ว่ามันเป็นหนึ่งซับที่ไม่ถูกต้อง Backspace อายุมากแล้วจริง ๆ หลังจากตัวละครประมาณ 20 ตัว!
bgStack15

<kbd> Ctrl </kbd> - <kbd> C </kbd> หากคุณต้องการเก็บประวัติอ้างถึงstackoverflow.com/a/9679852/6521116
Kris Roofe

คำตอบ:


286
  1. กดCtrl- Uเพื่อลบทุกอย่างก่อนเคอร์เซอร์ คำสั่งที่ถูกลบจะถูกเก็บไว้ในบัฟเฟอร์ กดCtrl- Yเพื่อวางคำสั่งที่ถูกลบ

    (ไม่บังคับ: กดEndหรือCtrl- Eเพื่อข้ามไปยังจุดสิ้นสุดของอินพุตก่อน)

  2. หรืออีกวิธีหนึ่งกดCtrl- Cเพื่อยกเลิกสิ่งที่คุณกำลังพิมพ์


28
มีข้อแม้คือ: Ctrl-C จะฆ่าพรอมต์ปัจจุบันเริ่มต้นพรอมต์ใหม่และตั้งค่ารหัสส่งคืนเป็น 1
716468

14
อย่าคุ้นเคยกับสิ่งนั้นใช้ Ctrl-U Ctrl-C ไม่เลวใน bash แต่ถ้าคุณมีพรอมต์ไคลเอนต์ mysql เช่นนั้น Ctrl-C จะตัดการเชื่อมต่อจากเซิร์ฟเวอร์ซึ่งน่ารำคาญจริงๆ
คริสเตียน

1
โปรดทราบว่าในหลาย ๆ ระบบนอกจากนี้ยังมีอักขระ 'kill' ของเทอร์มินัลซึ่งฆ่าอินพุตดังนั้น บ่อยครั้งนั่นคือ control-X stty -aคุณสามารถตรวจสอบกับ และจะทำงานกับโปรแกรมใด ๆ ที่ไม่ได้ปรับเปลี่ยนการควบคุมเทอร์มินัล
Jonathan Leffler

Ctrl-A ตามด้วย Ctrl-K ยังใช้งานได้ ข้อความ 'ถูกฆ่า' ถูกเก็บไว้และคุณสามารถวางได้โดยใช้ Ctrl-Y การกดแป้นเหล่านี้ในความเป็นจริงมาจากห้องสมุดสายการอ่าน: cnswww.cns.cwru.edu/php/chet/readline/rluserman.html .. เพื่อให้คุณสามารถค้นหาพวกเขาในเครื่องมือใด ๆ ที่ส่วนต่อประสานผู้ใช้ใช้ห้องสมุด (ที่จริง Emacs, ทุบตี, ฯลฯ .. ) คุณสามารถปรับแต่งพฤติกรรมของมันได้โดยการแก้ไขไฟล์. inputrc (ดูที่ลิงค์ด้านบนเพื่อดูรายละเอียดเพิ่มเติม)
rkachach

93

ลอง+Ctrl Uนั่นเป็นการลบบรรทัดอินพุต


7
ขอบคุณฉันเกือบยอมรับว่านี่เป็นคำตอบ แต่ฉันพบว่ามันล้างเฉพาะอินพุตก่อนเคอร์เซอร์ ในบางกรณีฉันอยู่ในระหว่างการแก้ไขคำสั่งดังนั้นฉันค่อนข้างจะจำ Ctrl + C แทนที่จะเป็น Ctrl + U เพียงแค่ "ทิ้งอินพุตปัจจุบัน"
user85509


21

Ctrl- U, Ctrl- Kทำเคล็ดลับเช่นกัน

Ctrl- Uลบทุกอย่างตั้งแต่ต้นบรรทัดจนถึงเคอร์เซอร์Ctrl- Kลบทุกอย่างตั้งแต่เคอร์เซอร์จนถึงท้ายบรรทัด (บางครั้งมีประโยชน์ในการใช้เพียงหนึ่งในนั้น)


13

มีสองตัวเลือกในการทำเช่นนี้

ctrl+ c- จะเป็นการลบทั้งบรรทัดไม่ว่าเคอร์เซอร์จะอยู่ที่ใด

ctrl+ u- ล้างบรรทัดจากตำแหน่งของเคอร์เซอร์จนถึงจุดเริ่มต้น


2
"พิจารณาว่าการใช้ Cu (หรือ Ce แล้ว Cu) จะเก็บสิ่งที่คุณล้างในบัฟเฟอร์เพื่อให้คุณสามารถวางได้ในภายหลังโดยใช้ Cy" ทำเครื่องหมายคำสั่งเดียวที่ง่ายกว่าคือ ctrl + _ stackoverflow.com/questions/1056440/…ตอบโดย john kug - เพิ่งเริ่ม stackoverflow dont มีคะแนนเพียงพอที่จะเพิ่มความคิดเห็นให้คุณตอบ
vks

9

Esc#ทางลัดที่ดีกด มันจะเติม#อักขระ (ซึ่งจะทำให้บรรทัดเป็นความคิดเห็น) จากนั้นกด Enter หากคุณตัดสินใจว่าคุณยังต้องการคำสั่งอยู่คุณยังคงมีอยู่ในประวัติของคุณ :)


3
ในเทอร์มินัลส่วนใหญ่สิ่งนี้ก็เหมือนกับ Alt + # ซึ่งทำให้การกดแป้นพิมพ์หนึ่งครั้ง (chorded)
Dolda2000

วิธีแก้ปัญหาที่เรียบง่ายและฉลาดและฉันคิดว่านี่เป็นวิธีที่ใช้งานง่ายกว่าในการยกเลิกคำสั่ง สิ่งที่ฉันกำลังค้นหา :)
Cas

9

กดEscบวกBackspaceเครื่องหมายใน bash จะเป็นการล้างทุกอย่างจนถึงตำแหน่งของเคอร์เซอร์

(ใน Cygwin สิ่งนี้จะล้างข้อมูลที่ป้อนจนถึงคำถัดไปคำจะถูกคั่นด้วยช่องว่างเครื่องหมายขีดล่าง ... )


3

พิจารณาว่าการใช้Ctrl- U(หรือCtrl- Eแล้วCtrl- U) จะเก็บสิ่งที่คุณล้างในบัฟเฟอร์เพื่อให้คุณสามารถวางไว้ในภายหลังโดยใช้-CtrlY


3

หากคุณกำลังใช้ Bash ในโหมด vi (ตั้งค่าด้วยset -o vi) จากนั้นกดEscเพื่อสลับไปที่โหมดปกติของ vi และพิมพ์ddเพื่อลบบรรทัดปัจจุบัน!


3

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

บรรทัดความคิดเห็นและกลับมาพร้อมรับคำใหม่

ใช้คีย์ลัดอย่างใดอย่างหนึ่ง:

  • Esc,#
  • Alt+#

อักขระแฮช#จะถูกเติมไว้ในบรรทัดดังนั้นจะทำให้ทั้งบรรทัดกลายเป็นความคิดเห็น มันจะส่งคืนพร้อมต์ใหม่ราวกับว่าผู้ใช้กด Enter เช่น

$ #rm -rf /foo/bar/really/long/path/here
$

ดึงสายแสดงความคิดเห็น

ในการกู้คืนบรรทัดเก่าจากประวัติคอนโซลใช้หนึ่งในทางลัดต่อไปนี้:

  • Up
  • Ctrl+p

ทำซ้ำคีย์ลัดจนกระทั่งบรรทัดที่ต้องการปรากฏขึ้น


การลบคำนำหน้า Quick Hash

หากต้องการลบ#คำนำหน้าแฮชของบรรทัดมีตัวเลือกที่แตกต่างกันสองสามตัว:

ลบอักขระตัวแรกและดำเนินการคำสั่งทันที:

  • Esc, 1, Esc,#
  • Alt+ -, Alt+#

เลื่อนเคอร์เซอร์เพื่อเริ่มและลบอักขระตัวแรกโดยไม่ต้องดำเนินการคำสั่ง:

  • Home, Delete
  • Ctrl+ a, Ctrl+d

2

หากต้องการลบบรรทัดปัจจุบันให้ลอง:

Ctrl- X, Ctrl-U

คุณสามารถใช้:

Esc-D

ซึ่งต้องการใน ~ / .inputrc:

"\ed": kill-whole-line 

ดู: http://codesnippets.joyent.com/posts/show/1690


หากคุณต้องการเพียงปุ่ม escape เพื่อล้างการเพิ่มบรรทัดทั้งหมด"\e\e": kill-whole-line(ต้องกดปุ่ม esc สองครั้ง)
binaryfunt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.