Ist es möglich, Strg-w (Wort löschen) zu konfigurieren?

40

Normalerweise wird mit Ctrl+ Wauf das letzte Leerzeichen zurückgesetzt.

Kann es so konfiguriert werden, dass zusätzliche Zeichen verwendet werden, z /.

Bearbeiten: Um es klarer zu machen: Ich möchte den Schlüssel nicht dafür konfigurieren, sondern auch den Löschvorgang beenden /.

Beispiel:

vim /foo/bar^W
vim /foo/
SkaveRat
quelle

Antworten:

29

Was für mich funktionierte, war, die folgenden Zeilen zu meinem .bashrc hinzuzufügen

stty werase undef
bind '\C-w:unix-filename-rubout'

Sie benötigen die Undef-Zeile, ansonsten ignoriert bash Ihre neue Bindung für C-w

mkm
quelle
3
Es sollte beachtet werden, dass stty werase undefSie Cw in keinem Programm verwenden können (Bind ermöglicht die Verwendung in readline)
0fnt
24

Sie sollten in der Lage sein, Esc und dann die Rücktaste zu verwenden, um durch Schrägstriche begrenzte Wörter zu löschen.

Sie können dies ändern, indem Sie dies in Ihre .bashrc-Datei einfügen:

bind '\C-f:unix-filename-rubout'

Verwenden Ctrl+f Sie jetzt, um zu tun, was Sie wollen.

Nicht jetzt
quelle
1
Danke, das ist der Befehl, der funktioniert. Gibt es eine Möglichkeit, den Befehl von Cw zu überschreiben? Wenn ich ihn auf ändere, C-w:...wird das Standardverhalten beim Löschen des nächsten Leerzeichens immer noch aktiviert. Auf einer anderen Taste (wie F), wenn dies problemlos funktioniert.
SkaveRat 16.01.12
Ich glaube nicht, dass Strg-W allein von der Shell verwaltet wird. Es kann auch vom tty verwaltet werden. Womit wird Ihre Tty-Einstellung angezeigt stty -a? hast du control-w als standard char für werase? Wenn Sie diese Einstellung mit comman aus tty entfernen stty werase undef, funktioniert bash dann wie erwartet?
Eppesuig
23

Für dieses spezielle Problem können Sie auch Folgendes verwenden:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Gute Referenz: Abenteuer mit Bashs Wortlöschung

fedorqui
quelle
2
Genial! Die meisten anderen Antworten schlagen erneutes Binden Ctrl+woder Strg + B oder ähnliches vor unix-filename-rubout, aber es ist so viel besser, dass es eine eingebaute Bindung gibt: M-Rücktaste (Alt + Rücktaste oder Esc-Rücktaste)
Colin D Bennett
Hat bei mir nicht funktioniert
ethanjyx
@ethanjyx oh. Ich arbeite an GNU Bash. Bist du auch in diesem Geschmack?
Fedorqui
7

Mit bash können Sie den gewünschten Effekt erzielen, indem Sie Folgendes in Ihre ~ / .bashrc-Datei einfügen:

bind '"\C-w":backward-kill-word'

Drücken Sie CTRL+Vund die Tastenkombination, um zu sehen, wie es für Ihren Terminalemulator aussieht. Beispielsweise CTRL+bkspkann auf verschiedenen Endgeräten zB ^Hoder unterschiedlich interpretiert werden ^?. Der ^Charakter ist der gleiche wie CTRL.


quelle
Ich glaube, ich war mit meiner Frage nicht spezifisch genug. Ich wollte /als zusätzliches Stop-Zeichen keine Möglichkeit haben, den Lösch-Wort-Befehl an eine andere Taste zu binden. Ich habe meine Frage bearbeitet
SkaveRat
Bei Verwendung von Backward-Kill-Word, das an \ Cw gebunden ist, wird der zuletzt angegebene Schrägstrich rückwärts und durch Leerzeichen begrenzte Wörter gelöscht. Das ist nicht was du wolltest?
Mein System verwendet ^F- aber die Verwendung "\^F"im obigen Skript funktioniert nicht
SkaveRat
1
Das CtrlZeichen ist \Cim Skript geschrieben und nicht \^.