Come posso eliminare una parola all'indietro dalla riga di comando (bash e zsh)?


118

Come posso cancellare una parola all'indietro dalla riga di comando? Sono veramente abituato ad alcuni editor che eliminano l'ultima 'parola' usando Ctrl+ Backspace, e mi piacerebbe anche quella funzionalità dalla riga di comando.

Al momento sto usando Bash e anche se potrei saltare indietro di una parola e quindi eliminare una parola in avanti, preferirei avere questo come tasto rapido o un evento come Ctrl+ Backspace.

Come può ottenere questo risultato?

Risposte:


169

ctrlwè la "kill word" standard (aka werase). ctrluuccide l'intera linea ( kill).

Puoi cambiarli con 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$

Nota che non devi mettere il personaggio di controllo reale sulla linea, stty capisce mettere ^e quindi il personaggio che colpiresti con controllo.

Dopo aver fatto questo, se lo premo ctrlpcancellerà una parola dalla linea. E se colpisco ctrla, cancellerà l'intera linea.


Usando il sttycomando ho tentato di assegnare "kill word" Ctrl+BckSpcdigitando stty weraseseguito da Ctrl-v Ctrl-Backspace. Ciò inserisce il carattere letterale Ctrl-Backspace come argomento per stty werase. Sfortunatamente non è necessario digitare Ctrl-Backspaceper eliminare la parola ma funziona solo con la Backspacechiave. Quindi vorrei secondare la richiesta di @terdon per imparare a farlo. Per ripristinare il werasevalore predefinito, utilizzare stty werase Ctrl-v Ctrl-w.
Timothy Martin,

@TimothyMartin Sono un po 'bloccato su come fare ctrl-backspace. Backspace viene generalmente inviato come uno ctrl-ho ctrl-?, quindi ctrl-backspacesarebbe in qualche modo ctrl-ctrl-backspace. Ho provato a capire se era stato inviato qualcosa di diverso, ma almeno Putty inviava backspace durante la digitazione ctrl-backspace.
Kurtm,

3
ctrl + w elimina efficacemente la parola ma copia anche negli appunti, cancellando tutto ciò che avevi memorizzato (o spingendolo verso il basso?).
Elijah Lynn,

1
esc - delete ha funzionato :-)
Rene Wooller il

1
che ... sta cambiando la vita. mio Dio.
cablato

27

Puoi anche farlo con CtrlW.

Un'altra opzione è quella di impostare il proprio collegamento, ma questo dipenderà dall'emulatore di terminale che si sta utilizzando. Per xterme rxvte forse per altri, aggiungi questa riga al tuo ~/.inputrc(crea il file se non esiste):

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

gnome-terminale il suo simile sembra avere AltBackspacedi default, ma apparentemente richiede di patchare readline()per ottenere CtrlBackspace.

Vedi anche:



0

Su Mac, puoi usare:

Fn+Delete


2
Ciò elimina 1 carattere davanti al cursore, non 1 parola dietro
Dannid

Non so se questo è ancora rilevante, ma sarebbe <Alt> + <Backspace> su Mac.
Hassan,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.