Wie kann ich ein Wort in der Befehlszeile rückwärts löschen (bash und zsh)?

118

Wie kann ich ein Wort in der Befehlszeile rückwärts löschen? Ich bin es wirklich gewohnt, dass einige Redakteure das letzte 'Wort' mit Ctrl+ löschen Backspace, und ich möchte diese Funktionalität auch in der Befehlszeile.

Im Moment verwende ich Bash und obwohl ich ein Wort rückwärts springen und dann ein Wort vorwärts löschen könnte, wäre es mir lieber, wenn dies als Kurztaste oder Ereignis als Ctrl+ verwendet würde Backspace.

Wie kann das erreicht werden?

Klarheit
quelle

Antworten:

169

ctrlwist das Standard "Kill Word" (aka werase). ctrlutötet die ganze Zeile ab ( kill).

Sie können sie mit ändern 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$

Beachten Sie, dass Sie nicht das eigentliche Steuerzeichen in die Zeile setzen müssen, stty versteht das Setzen ^und dann das Zeichen, das Sie mit der Steuerung treffen würden.

Wenn ich danach drücke ctrlp, wird ein Wort aus der Zeile gelöscht. Und wenn ich drücke ctrla, wird die gesamte Zeile gelöscht.

Kurtm
quelle
Mit dem sttyBefehl habe ich versucht, das "kill word" zuzuweisen, Ctrl+BckSpcindem ich stty werasegefolgt von Strg-v Strg-Rücktaste eingab. Dies fügt das Literal Ctrl-Backspace als Argument für ein stty werase. Leider erfordert es keine Eingabe Ctrl-Backspace, um das Wort zu löschen, sondern funktioniert nur mit der BackspaceTaste. Deshalb möchte ich die Anfrage von @terdon unterstützen, um zu erfahren, wie das geht. weraseVerwenden Sie, um die Standardeinstellungen wiederherzustellen stty werase Ctrl-v Ctrl-w.
Timothy Martin
@ TimothyMartin Ich bin ein wenig fest auf, wie es geht ctrl-backspace. Rücktaste wird in der Regel entweder als ctrl-hoder gesendet ctrl-?, ctrl-backspacewürde also irgendwie sein ctrl-ctrl-backspace. Ich habe versucht herauszufinden, ob etwas anderes gesendet wurde, aber Putty sendet beim Tippen nur die Rücktaste ctrl-backspace.
Kurtm
3
ctrl + w löscht das Wort effektiv, kopiert es aber auch in die Zwischenablage und löscht alles, was Sie gespeichert haben (oder drückt es nach unten?).
Elijah Lynn
1
esc - löschen gerade gearbeitet :-)
Rene Wooller
1
das ... verändert das Leben. mein Gott.
Wired00
27

Sie können dies auch mit CtrlW.

Eine andere Möglichkeit ist das Festlegen einer eigenen Verknüpfung, die jedoch vom verwendeten Terminalemulator abhängt. Fügen Sie für xtermund rxvtund möglicherweise für andere Personen diese Zeile zu Ihrer hinzu ~/.inputrc(erstellen Sie die Datei, falls sie nicht vorhanden ist):

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

gnome-terminalund seine Art scheint AltBackspacestandardmäßig zu haben, aber anscheinend müssen Sie patchen, readline()um zu bekommen CtrlBackspace.

Siehe auch:

terdon
quelle
24

Alt+ Backspacefunktioniert bei mir in bash und zsh.

Luis
quelle
2
Funktioniert nicht mit iterm :(
Akarsh Satija
5
Wenn Sie beispielsweise eine URL löschen und Ctrl+Wdiese verwenden, wird die gesamte URL Alt+Backspacegelöscht, während ein Wort gelöscht wird. Wenn ein Sonderzeichen gefunden wird, wird der Löschvorgang abgebrochen.
Metafaniel
Und wie immer muss man ctrl-yruckeln / rückgängig machen / einfügen.
Pablo A
Dies löst es für iterm: github.com/fish-shell/fish-shell/issues/2124
Pascalius
0

Auf dem Mac können Sie Folgendes verwenden:

Fn+Delete

J. Yang
quelle
2
Das löscht 1 Zeichen vor dem Cursor, nicht 1 Wort dahinter
Dannid
Ich weiß nicht, ob dies noch relevant ist, aber das wäre auf einem Mac <Alt> + <Backspace>.
Hassan