Bash: ลบออกจากเคอร์เซอร์จนถึงท้ายบรรทัดด้วยแป้นพิมพ์ลัด


91

พิจารณาพรอมต์ bash ต่อไปนี้โดยที่จะ^บอกตำแหน่งของพรอมต์:

$ git commit -am "[bug 123456] Do this and that with the bug"
                               ^

สมมติว่าฉันต้องการส่งมอบข้อผิดพลาดเดียวกันอีกครั้งด้วยข้อความส่งมอบที่แตกต่างกัน มีวิธีลบข้อความจากตำแหน่งเคอร์เซอร์จนถึงจุดสิ้นสุดบรรทัดหรือไม่

คำตอบ:


145

ใช้Ctrl+ Kเพื่อลบจากเคอร์เซอร์จนถึงท้ายบรรทัด

ใช้Ctrl+ Uเพื่อลบจากเคอร์เซอร์ไปที่จุดเริ่มต้นของบรรทัด


กุญแจสำคัญในการรวมกันคืออะไร?
ShooShoSha

@ShooShoSha ลอง Shift + Insert
user128285

ความหมายของ K และ U คืออะไรฉันไม่สามารถจำได้ในสัปดาห์หน้าถ้าฉันไม่ทราบความหมายวิธีการจำได้
workplaylifecycle

2
@ hylepo Dunno แต่ความทรงจำของฉันคือBrexit - the UK leaves Europe- U ลบไปยังจุดเริ่มต้นและ K ถึงจุดสิ้นสุด
Snowcrash

47

ขึ้นอยู่กับว่าคุณกำลังใช้โหมดแก้ไขvi ( set -o vi) หรือ emacs ( set -o emacs) ภายในเชลล์ของคุณ

โดยปกติแล้วเชลล์ของคุณจะใช้โหมดแก้ไข emacs เป็นค่าเริ่มต้น

  • ในโหมด emacs ลบไปยังจุดสิ้นสุดของเส้นสามารถทำได้โดยใช้คำสั่ง-ctrlk

  • อย่างไรก็ตามหากคุณใช้โหมดแก้ไข vi ในเชลล์คำสั่งคุณสามารถใช้ผลลัพธ์เดียวกันได้โดยการพิมพ์Esc(ซึ่งจะทำให้คุณอยู่ในโหมดคำสั่ง) ตามด้วยd- $(หากคุณต้องการลบทั้งบรรทัดให้ป้อนdd)

หากคุณไม่แน่ใจว่าโหมดการแก้ไขใดที่คุณใช้อยู่ในเชลล์ให้ป้อนคำสั่งset -oจากบรรทัดคำสั่งและคุณจะสามารถกำหนดโหมดการแก้ไขที่คุณกำลังใช้อยู่:

set -o
...snip...
emacs           on
...snip...
vi              off

ในการสลับโหมดการแก้ไขบรรทัดคำสั่งของคุณเพียงแค่พิมพ์:

set -o vi

หรือ

set -o emacs

4
หากคุณต้องการตัวช่วยจำKย่อมาจาก kill (บรรทัดเริ่มต้นจากตำแหน่งเคอร์เซอร์)
Gregor Botero

5
ในโหมดคำสั่ง vi Dทำงานเหมือนกับd$
glenn jackman

3
+1 สำหรับการเขียนคำตอบที่ถูกต้องและการอธิบายว่า shellopts อาจเปลี่ยนแปลงได้
TC1

1
>> ขอบคุณ ดูเหมือนว่าฉันกำลังใช้ vi ดังนั้น CTRL + K จึงทำกลอุบาย - Adam Matan อดัมแล้วนั่นคือ emacs-mode ที่คุณอยู่ไม่ใช่ vi
catch22

1
ใน Kubuntu oneiric (konsole), Ctrl + K และ ESC Shift + D ทำงานได้ทั้งคู่ ESC d จะลบบรรทัดบางอัน (อาจเป็น ';') (การพิมพ์ a $ หลังจากนั้นเพียงแค่ส่ง $ ไปยังคอนโซล) ฉันพยายามหาวิธีการทำเช่นนั้นสักครู่ ขอบคุณ!
โจ

3

ในกรณีที่คุณคุ้นเคยกับ Zsh และ Bash เพียงอย่างเดียวต่อไปนี้คือการเชื่อมโยงคีย์ที่เทียบเท่าที่คุณต้องการ (อาจ):

ทุบตี

bind '"\C-k"':kill-line

zsh

bindkey "\C-k"      vi-kill-eol

ข้อมูลอื่น ๆ ที่เกี่ยวข้อง

ในการรับรายการการเชื่อมโยงคีย์:

# bash
bind -p

# zsh
bindkey

ฉันสับสน สำหรับ Bash ไม่ควรใช้"^k" กับ Control + K?
wjandrea

ขออภัยนั่นเป็นข้อผูกพันส่วนบุคคลของฉัน ฉันจะทำให้การผูกเริ่มต้น แต่ไม่พอใจกับไวยากรณ์ทุบตี เนื่องจากคุณได้พูดถึงสิ่งที่ฉันควรจะได้รับคำของคุณและแก้ไขโพสต์ของฉัน
Sridhar Sarnobat

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