ปุ่ม Escape ของ Windows shell (ลบทั้งบรรทัด) ที่เทียบเท่าใน Bash


13

ในบรรทัดคำสั่งของ Windows (powershell และ cmd) เมื่อคุณกดEscปุ่มขณะที่อยู่บนบรรทัดสิ่งที่คุณพิมพ์ที่พรอมต์จะถูกลบออก

ฉันพบว่าการกดปุ่มEscที่ bash prompt ไม่ทำอะไรเลย กดEscแล้วbackspaceลบคำ แต่ต้องทำสำหรับแต่ละคำ

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

คุณทำอะไร?

ฉันตระหนักถึงclearคำสั่งและCtrl-Lทางลัด แต่ฉันไม่ได้พูดถึงการล้างข้อมูลเทอร์มินัลทั้งหมด แค่บรรทัด


1
ไม่นานมานี้ฉันโพสต์รายการแป้นพิมพ์ลัด readline ที่มีประโยชน์บน superuser คุณอาจพบว่ามีประโยชน์เช่นกัน (Readline เป็นห้องสมุดที่ทุบตีใช้สำหรับการแก้ไขบรรทัด)
jw013

เฮ้ jw013 ขอบคุณสำหรับการแก้ไขที่ดี :-)
Animesh

คำตอบ:


15

คุณต้องการkill-whole-lineแต่สิ่งนี้จะไม่ถูกผูกไว้โดยค่าเริ่มต้นในทุบตี backward-kill-line( CtrlX Backspace) และunix-line-discard( CtrlU) ทั้งคู่ลบจากจุดปัจจุบันถึงจุดเริ่มต้นของบรรทัดดังนั้นเพียงไปที่จุดสิ้นสุดของบรรทัดและใช้อย่างใดอย่างหนึ่ง


คุณถูกต้องมันไม่ผูกพันกับอะไรเลย bind -Pฉันเพิ่งค้นพบว่าการใช้ ฉันเดาCtrl-Uแล้วCtrl-Yเป็นตัวเลือกเดียวแล้ว
Animesh

คุณจะพบว่าการผูกค่าเริ่มต้นจำนวนหนึ่งนั้นมาจากลำดับที่สำคัญในตัวแก้ไข Emacs และการผูกเหล่านั้นจะปรากฏขึ้นที่อื่นเช่นกัน
Blrfl

@Blrfl เพื่อแสดงความคิดเห็นของคุณส่วนใหญ่การโยงคีย์เหล่านี้ได้ถูกแยกออกเป็นไลบรารีreadlineซึ่งมีโปรแกรม commandline จำนวนมากใช้
jw013


6

Ctrl+aไปที่จุดเริ่มต้นของบรรทัดและCtrl+kลบไปยังจุดสิ้นสุดของบรรทัด


ลอง^Uก่อนในการใช้งานโหมดแก้ไขบรรทัดคำสั่ง Emacs ส่วนใหญ่จะลบบรรทัดเต็มแล้ว ในที่ที่มันจะถูกลบทิ้งจากเคอร์เซอร์ (ตัวอย่างเช่น GNU readline) ให้กด^Kหลังจากนั้น
mirabilos

3

เพื่อขยายคำตอบอิกนาซิโอ Vazquez อับราฮัมของเล็ก ๆ น้อย ๆ คุณจะได้รับ (เกือบ) Windows เช่นพฤติกรรมจากEscที่สำคัญในการทุบตีโดยมีผลผูกพันkill-whole-lineที่จะEscมีคำสั่งดังต่อไปนี้

bind '"\e":kill-whole-line'

หากคุณเพิ่มบรรทัดลงใน~/.inputrcไฟล์ของคุณการเชื่อมจะยังคงอยู่ระหว่างเซสชัน

อย่างไรก็ตามโปรดทราบว่านี่เป็นสิ่งที่ไม่ได้มาตรฐานมากเนื่องจากทุบตีจริง ๆ ใช้Escคีย์เป็นคีย์การปรับเปลี่ยนอื่น (เช่น Alt หรือ Ctrl แบบไม่คงที่) หากคุณดูรายการการเชื่อมโยงคีย์ที่มีอยู่ (ด้วยbind -P) คุณจะเห็นคำสั่งหลายคำสั่งที่ผูกกับคีย์ผสมที่ขึ้นต้นด้วย "\ e" (เช่น

"\eb": backward-word

ซึ่งตั้งค่าชุดค่าผสมEsc+ Bเพื่อเลื่อนเคอร์เซอร์กลับไปที่คำเริ่มต้นล่าสุด - แทนCtrl+ ยกเว้นว่าคุณต้องปล่อยEsc(รวมทั้งBแน่นอน) หากคุณต้องการทำมากกว่าหนึ่งครั้งในแถว )

และที่อธิบายว่าทำไมผมบอกว่าพฤติกรรมที่คุณได้รับคือเกือบ Windows เช่น: เมื่อคุณกดEscตรวจสอบทุบตีเพื่อดูว่าคุณกำลังใช้มันร่วมกับกุญแจอีกดอกหนึ่ง; ดังนั้นหากคุณผูกมันไว้จะkill-whole-lineมีความล่าช้าเล็กน้อยระหว่างการกด (หรือค่อนข้างปล่อย) Escและ bash การล้างบรรทัดให้คุณ

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

(หมายเหตุ: ข้อมูลส่วนใหญ่ที่นี่ฉันได้รับจากการอ่าน - และติดตามลิงก์ใน - คำตอบนี้)


1
สิ่งนี้มีประโยชน์มากขอบคุณและทำงานได้มากหรือน้อยตามที่โฆษณาไว้ แต่ฉันพบว่ามันสร้างพฤติกรรมที่น่ารำคาญเมื่อคำสั่งอื่นดำเนินการ "ไม่ถูกต้อง" เช่นการกด DEL เมื่อสิ้นสุดบรรทัด: สิ่งนี้จะล้างบรรทัดและแทนที่ด้วย[19;หรือรหัสหลบหลีกที่คล้ายกัน ในที่สุดฉันก็พบการทำแผนที่"\e\e"ไปที่kill-whole-line(เช่นแตะ Esc สองครั้งเพื่อล้างเส้น) การประนีประนอมที่ดี
j_random_hacker

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