ฉันจะลบคำย้อนหลังที่บรรทัดคำสั่ง (bash และ zsh) ได้อย่างไร


118

ฉันจะลบคำย้อนหลังที่บรรทัดคำสั่งได้อย่างไร ฉันเคยชินกับบรรณาธิการบางคนที่ลบ 'word' ล่าสุดโดยใช้Ctrl+ Backspaceและฉันต้องการฟังก์ชันการทำงานที่บรรทัดคำสั่งด้วย

ฉันใช้ทุบตีในขณะนี้และแม้ว่าฉันสามารถกระโดดย้อนกลับคำแล้วลบไปข้างหน้าคำที่ฉันอยากจะมีนี้เป็นอย่างรวดเร็วที่สำคัญหรือเหตุการณ์เป็น+CtrlBackspace

ทำสิ่งนี้ได้อย่างไร

คำตอบ:


169

ctrlwคือมาตรฐาน "คำฆ่า" (aka werase) ctrluฆ่าทั้งเส้น ( kill)

sttyคุณสามารถเปลี่ยนพวกเขาด้วย

-bash-4.2$ stty -a
speed 38400 baud; 24 rows; 80 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
        -echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
        -extproc -xcase
iflags: -istrip icrnl -inlcr -igncr -iuclc ixon -ixoff ixany imaxbel
        -ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -ocrnl -onocr -onlret -olcuc oxtabs -onoeot
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
        eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
        min = 1; quit = ^\; reprint = ^R; start = ^Q; status = <undef>;
        stop = ^S; susp = ^Z; time = 0; werase = ^W;
-bash-4.2$ stty werase ^p
-bash-4.2$ stty kill ^a
-bash-4.2$

โปรดทราบว่าไม่ต้องใส่อักขระควบคุมจริงบนบรรทัด stty เข้าใจการใส่^แล้วอักขระที่คุณจะตีด้วยการควบคุม

หลังจากทำสิ่งนี้ถ้าฉันกดctrlpมันจะลบคำออกจากบรรทัด และถ้าฉันโดนctrlaมันจะลบทั้งเส้น


การใช้sttyคำสั่งฉันพยายามกำหนด "kill word" ให้Ctrl+BckSpcโดยพิมพ์stty weraseตามด้วย Ctrl-v Ctrl-Backspace นี้แทรกตัวอักษรตัวอักษร Ctrl-Backspace stty weraseเป็นอาร์กิวเมนต์สำหรับ น่าเสียดายที่มันไม่จำเป็นต้องพิมพ์Ctrl-Backspaceเพื่อลบคำ แต่ทำงานได้ด้วยBackspaceปุ่มเพียงปุ่มเดียว ดังนั้นฉันต้องการที่สองคำขอของ @terdon เพื่อเรียนรู้วิธีการทำเช่นนี้ การตั้งค่าที่จะเริ่มต้นการใช้งานwerase stty werase Ctrl-v Ctrl-w
ทิโมธีมาร์ติน

@TimothyMartin ฉันเล็ก ๆ น้อย ๆ ctrl-backspaceที่ติดอยู่กับวิธีการทำ Backspace จะถูกส่งโดยทั่วไปเป็นอย่างใดอย่างหนึ่งctrl-hหรือctrl-?ดังนั้นอย่างใดจะเป็นctrl-backspace ctrl-ctrl-backspaceผมไม่พยายามที่จะคิดว่าบางสิ่งบางอย่างที่แตกต่างกันถูกส่ง แต่ฉาบอย่างน้อยเพียงแค่ส่ง Backspace ctrl-backspaceเมื่อคุณพิมพ์
kurtm

3
ctrl + w ลบคำได้อย่างมีประสิทธิภาพ แต่ยังคัดลอกไปยังคลิปบอร์ดลบสิ่งที่คุณเก็บไว้ (หรือกดลง)
เอลียาห์ลินน์

1
esc - ลบเพิ่งทำงาน :-)
Rene Wooller

1
นั่นคือ ... การเปลี่ยนแปลงชีวิต พระเจ้า.
wired00

27

CtrlWนอกจากนี้คุณยังสามารถทำเช่นนี้กับ

ตัวเลือกอื่นคือตั้งค่าทางลัดของคุณเอง แต่สิ่งนี้จะขึ้นอยู่กับเทอร์มินัลอีมูเลเตอร์ที่คุณใช้ สำหรับxtermและrxvtและอาจอื่น ๆ เพิ่มบรรทัดนี้ของคุณ~/.inputrc(สร้างไฟล์หากไม่มี):

## rxvt, xterm
"\b":backward-kill-word

gnome-terminalและตระกูลของมันดูเหมือนจะมีAltBackspaceโดยค่าเริ่มต้น แต่เห็นได้ชัดว่าคุณต้องแก้ไขเพื่อให้ได้รับreadline()CtrlBackspace

ดูเพิ่มเติมที่:


24

Alt+ Backspaceใช้ได้กับฉันด้วยการทุบตีและ zsh


2
ไม่ทำงานกับ iterm :(
Akarsh Satija

5
ตัวอย่างเช่นการลบ URL และใช้Ctrl+Wมันจะลบทั้ง URL ในขณะที่Alt+Backspaceลบคำและจะหยุดการลบเมื่อพบอักขระพิเศษ
Metafaniel

และเช่นเคยคุณต้องctrl-yดึง / เลิกทำ / วาง
Pablo A

วิธีนี้แก้ได้สำหรับ iterm: github.com/fish-shell/fish-shell/issues/2124
Pascalius

0

สำหรับ Mac คุณสามารถใช้:

Fn+Delete


2
นั่นจะลบอักขระ 1 ตัวที่ด้านหน้าเคอร์เซอร์ไม่ใช่ 1 word หลัง
Dannid

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