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/

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


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.


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


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.


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 \^.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.