web-dev-qa-db-fra.com

Comment puis-je supprimer un mot en arrière sur la ligne de commande (bash et zsh)?

Comment puis-je supprimer un mot en arrière sur la ligne de commande? Je suis vraiment habitué à ce que certains éditeurs suppriment le dernier "Word" en utilisant Ctrl+Backspaceet j'aimerais aussi cette fonctionnalité sur la ligne de commande.

J'utilise Bash en ce moment et bien que je puisse sauter en arrière un mot puis supprimer un mot en avant, je préfère avoir ceci comme touche rapide ou événement comme Ctrl+Backspace.

Comment y parvenir?

133
lucidquiet

ctrlw est le "kill word" standard (aka werase). ctrlu tue toute la ligne (kill).

Vous pouvez les changer avec 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$

Notez qu'il n'est pas nécessaire de mettre le caractère de contrôle réel sur la ligne, stty comprend de mettre ^ puis le caractère que vous frapperiez avec contrôle.

Après avoir fait ça, si je frappe ctrlp il effacera un mot de la ligne. Et si je frappe ctrla, il effacera toute la ligne.

188
kurtm

Vous pouvez également le faire avec CtrlW.

Une autre option consiste à définir votre propre raccourci, mais cela dépendra de l'émulateur de terminal que vous utilisez. Pour xterm et rxvt et peut-être d'autres, ajoutez cette ligne à votre ~/.inputrc (Créez le fichier s'il n'existe pas):

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

gnome-terminal Et ses semblables semblent avoir AltBackspace par défaut mais apparemment vous oblige à patcher readline() afin d'obtenir CtrlBackspace.

Regarde aussi:

29
terdon

Alt+Backspace travaille pour moi en bash et zsh.

26
Luis

Sur Mac, vous pouvez utiliser:

Fn+Delete

1
J.Yang