Bagaimana cara saya menghapus kata mundur di baris perintah (bash dan zsh)?

118

Bagaimana saya bisa menghapus kata mundur di baris perintah? Saya benar-benar terbiasa dengan beberapa editor menghapus 'kata' terakhir menggunakan Ctrl+ Backspace, dan saya ingin fungsi itu di baris perintah juga.

Saya menggunakan Bash saat ini dan meskipun saya bisa melompat mundur satu kata dan kemudian menghapus kata maju, saya lebih suka memiliki ini sebagai tombol cepat, atau acara sebagai Ctrl+ Backspace.

Bagaimana bisa mencapai ini?

lucidquiet
sumber

Jawaban:

169

ctrlwadalah standar "kill word" (alias werase). ctrlumembunuh seluruh baris ( kill).

Anda dapat mengubahnya dengan 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$

Perhatikan bahwa seseorang tidak harus meletakkan karakter kontrol yang sebenarnya pada baris, stty mengerti menempatkan ^dan kemudian karakter yang akan Anda tekan dengan kontrol.

Setelah melakukan ini, jika saya menekannya ctrlpakan menghapus kata dari garis. Dan jika saya menekan ctrla, itu akan menghapus seluruh baris.

kurtm
sumber
Menggunakan sttyperintah saya mencoba untuk menetapkan "kata kill" Ctrl+BckSpcdengan mengetik stty werasediikuti oleh Ctrl-v Ctrl-Backspace. Ini memasukkan karakter Ctrl-Backspace literal sebagai argumen untuk stty werase. Sayangnya itu tidak perlu mengetik Ctrl-Backspaceuntuk menghapus kata tetapi bekerja hanya dengan Backspacekunci. Jadi saya ingin kedua permintaan @terdon untuk belajar bagaimana melakukan ini. Untuk mengatur ulang weraseke default, gunakan stty werase Ctrl-v Ctrl-w.
Timothy Martin
@TimothyMartin Saya agak terjebak pada bagaimana melakukan ctrl-backspace. Backspace umumnya dikirim sebagai salah satu , ctrl-hatau entah bagaimana akan demikian . Saya memang mencoba mencari tahu apakah sesuatu yang berbeda dikirim, tetapi dempul, setidaknya, hanya mengirim backspace ketika Anda mengetik . ctrl-?ctrl-backspacectrl-ctrl-backspacectrl-backspace
kurtm
3
ctrl + w secara efektif menghapus kata tetapi juga menyalin ke clipboard, menghapus apa pun yang telah Anda simpan (atau menekannya?).
Elijah Lynn
1
esc - delete baru saja bekerja :-)
Rene Wooller
1
itu ... mengubah hidup. Tuhanku.
wired00
27

Anda juga dapat melakukan ini dengan CtrlW.

Pilihan lain adalah mengatur pintasan Anda sendiri tetapi ini tergantung pada emulator terminal yang Anda gunakan. Untuk xtermdan rxvtdan mungkin orang lain, tambahkan baris ini ke ~/.inputrc(buat file jika tidak ada):

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

gnome-terminaldan sejenisnya tampaknya AltBackspacesecara default tetapi tampaknya mengharuskan Anda untuk menambal readline()untuk mendapatkan CtrlBackspace.

Lihat juga:

terdon
sumber
24

Alt+ Backspacebekerja untuk saya di bash dan zsh.

Luis
sumber
2
Tidak bekerja dengan iterm :(
Akarsh Satija
5
Misalnya menghapus URL dan menggunakannya Ctrl+Wmenghapus seluruh URL sementara Alt+Backspacemenghapus kata dan berhenti menghapus ketika karakter khusus ditemukan.
Metafaniel
Dan seperti biasa Anda harus ctrl-ymencabut / membatalkan / menempel.
Pablo A
Ini menyelesaikannya untuk iterm: github.com/fish-shell/fish-shell/issues/2124
Pascalius
0

Di Mac, Anda dapat menggunakan:

Fn+Delete

J.Yang
sumber
2
Itu menghapus 1 karakter di depan kursor, bukan 1 kata di belakang
Dannid
Tidak tahu apakah ini masih relevan, tapi itu akan menjadi <Alt> + <Backspace> di Mac.
Hassan