Standardmäßig scheinen + und + genau dieselbe zsh
Wirkung CTRLzu whaben ALT.Backspace
Wie kann ich CTRL+ so belassen w, wie es ist, und ALT+ Backspaceso ändern, dass es bei nicht-alphanumerischen Zeichen stoppt?
Wenn sich der Cursor beispielsweise am Ende des folgenden Befehls befindet: echo /aaa/bbb/ccc
, sollte durch Drücken CTRLvon + verlassen werden , während durch Drücken von + verlassen werden sollte .wecho
ALTBackspaceecho /aaa/bbb/
AKTUALISIEREN
basierend auf der Antwort von @Thomas Dickey
habe ich Folgendes zu meinem hinzugefügt .zshrc
:
my-backward-delete-word () {
local WORDCHARS='~!#$%^&*(){}[]<>?+;'
zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '\e^?' my-backward-delete-word
Jetzt verhält sich der Kommandozeilen-Editor anders als erwartet.
Beispielsweise '
wird das einfache Anführungszeichen in meinem nicht aufgelistet WORDCHARS
, wenn ich also drücke Alt+BackSpace, sollte das backward-delete-word
bei aufhören '
.
Dies funktioniert im ersten Beispiel, im zweiten jedoch nicht:
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
im zweiten Beispiel hatte ich echo '=
auf der Kommandozeile left gedrückt. Nachdem ich ein zweites Mal gedrückt habe Alt+BackSpace, wurde alles aufgefressen, einschließlich echo
. Ich hätte erwartet, dass nur =
aufgefressen werden sollte, weil es bei hätte aufhören sollen '
.
Warum funktioniert das nicht wie erwartet?
Antwort1
Eigentlich sehe ich dies nicht in den ZSH-Bindungen aufgelistet, aber es bindkey
zeigt es fürDu, dann ist es durch Bindung an eine von Ihnen definierte Funktion konfigurierbar.
Ausgehend von meiner Antwort in
Wie kann ich in zsh einen Schrägstrich oder ein Wort löschen?, Ich habe das gefunden:
zsh: Backward-Kill-Word am Verzeichnistrennzeichen stoppen, was darauf hinwies,
- Betreff: Rückwärtstötungund gibt dieses Beispiel von Will Yardley:
ich verwende diesen Beitrag von jemandem aus der Liste (Oliver Kiddle); siehe Weitere Informationen hierzu finden Sie im Archiv vom Montag, 8. Oktober: tcsh-rückwärts-löschen-wort () { lokales WORDCHARS="${WORDCHARS:s#/#}" zle rückwärts-löschen-wort } ich habe es an Strg-W gebunden mit: Bindkey '^W' tcsh-rückwärts-löschen-Wort aber das können Sie natürlich ändern. ich denke, das ist es, wonach Sie suchen, oder? Die Variable '$WORDCHARS' bestimmt die Wortgrenzen, sodass Sie könnte global '/' hinzufügen, dies könnte jedoch andere Dinge beeinflussen Sie möchten es belassen, daher bevorzuge ich diese Funktion.
was zu Beispielen für die Verwendung
$WORDCHARS
in führtÄndern der Wortaufteilung in der ZSH-Shellsowie das Wiki
Also: Sie können es als lokale Variable in Ihrer eigenen Funktion verwenden $WORDCHARS
, Wörter nach Wunsch definieren und an einen beliebigen Schlüssel binden.
Wenn Sie Ihre Funktion definieren, vergessen Sie nicht, sie alsTastenbelegung:
zle -N tcsh-backward-delete-word