Bash: Kann ich Strg-Backspace setzen, um das Wort rückwärts zu löschen?

19

When in Shell (Bash) - Ich möchte, dass Strg-Rücktaste an "Wort rückwärts löschen" gebunden wird. Ist es möglich?

Bearbeiten :

Ich benutze konsole- terminal bei KDE.

Adobe
quelle
2
Die Frage ist unkompliziert, darüber gibt es keine Beschwerden. Ich möchte nur darauf hinweisen, dass es oftmals viel wert ist, "Standard" -Tastenbelegungen zu vereinfachen, die bereits in vielen Anwendungen vorhanden sind, anstatt das Anpassen ohne echten Gewinn und die Gewissheit, das Verhalten auf fremden Systemen niemals zu sehen. Ctrl+wist das, woran du dich gewöhnen solltest, imho.
Daniel Andersson
@ Daniel Andersson: oder alternativ - können Sie einen Weg entwickeln übertragen Ihre Einstellungen an die ausländische Maschine.
Adobe
Das Freigeben von Punktdateien ist ein gelöstes Problem, aber es hilft nicht viel auf anderen als mehr oder weniger lokalen Computern, auf denen Sie über recht offene Berechtigungen verfügen. Wenn Sie sich in einem fremden System befinden, haben Sie höchstwahrscheinlich nicht die Freiheit, solche Dinge neu zu konfigurieren (zumindest nicht, ohne von Kollegen geschlagen zu werden, die auch dieselbe Maschine verwenden :-)). Außerdem muss jede neue Anwendung speziell behandelt werden.
Daniel Andersson
6
Ich habe das umgekehrte Problem, ich bin es gewohnt, Ctrl-wdas vorherige Wort in der Konsole zu "löschen" und dies instinktiv auch in Eclipse oder Chrome zu tun, wo dies bedeutet, Tab schließen / aktuelle Datei schließen. Ziemlich nervig.
Ezequiel Muns,
1
Ich habe das gleiche Problem mit Chrome SShInATab. Wie mache ich Strg-W ohne Strg-W? :)
Riccardo SCE

Antworten:

11

Warum nicht einfach Alt+ Backspaceoder Ctrl+ verwenden W, die in den meisten Terminals bereits zugeordnet sind? Ich bin mir nicht sicher über die Konsole. Mit Xmodmap (man xmodmap) können auch andere benutzerdefinierte Schlüssel neu zugeordnet werden. (Paradoxerweise kann xmodmap Backspace nicht sehr gut neu zuordnen, da das Terminal die Zuordnungen überschreibt, aber es funktioniert gut mit den meisten Schlüsseln ...).

Höllenkind
quelle
9
Weil ich es in meinem Emacs gewohnt bin, Strg-Rücktaste zu drücken. Ich wusste über Ctrl-w Bescheid. Alt-Backspace ist neu für mich (+1).
Adobe
1
Guter Punkt, @hellork. Sie können das Steuerelement + die Rücktaste auf dem X-Server (über xmodmap) abfangen und einem nicht verwendeten Zeichen zuordnen (z. B. Alt-Rücktaste).
4
Das ärgerliche daran ist, dass Strg + Rücktaste in den meisten GUI-Apps auf den meisten gängigen Betriebssystemen eine häufig verwendete Zuordnung für "Wort rückwärts löschen" ist. Ebenso ist Strg + W für "Fenster schließen" weit verbreitet. Alt + w wird selten für irgendetwas in GUIs verwendet, an das ich denken kann. Standardisierung wäre toll. Ich frage mich, was die größere Störung sein würde, die Änderung der Terminals oder die Änderung der GUIs?
Naught101
1
@nichts, Control-W ist auf Unix-Terminals bereits der Standardschlüssel zum Löschen von Wörtern. Ja, es steht im Widerspruch zur Windows / GUI-Konvention, aber tatsächlich war es das erste Mal - nach vielen Jahren. Microsoft die Schuld geben!
Alexis
11

Ich habe diesen Thread über Google gefunden, aber die Antwort war nicht das, was ich hören wollte. Also habe ich rumgespielt:

Auf meinem Terminal sendet die normale ^HRücktaste, während die Tastenkombination Strg + Rücktaste sendet ^?. Es sollte also einfach sein ^?, ein Wort, das standardmäßig über Strg + W verfügbar ist, erneut zu binden , um es zu löschen.

Erster (erfolgloser Versuch):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Also sollte dies funktionieren:

$ bind '"\C-?":unix-word-rubout'

Allerdings kann es nicht ... jemand erklären?

Zweiter (erfolgreicher) Versuch:

$ bind '"\C-?":"^W"'

Wo das ^Wein Literal / Roh ist ^W(drücken Sie Strg + V, dann Strg + W, damit es angezeigt wird).

Daurnimator
quelle
Ihre erste Lösung hat bei mir tatsächlich funktioniert! Zweitens nicht.
Drew Hoskins
Der zweite Versuch scheint eher die Rücktaste selbst als die Strg-Rücktaste zu ersetzen.
user541686
7

Bearbeiten Sie einfach Ihre ~/.inputrc(möglicherweise müssen Sie eine erstellen oder die darin enthaltene kopieren /etc/inputrc), sodass sie Folgendes enthält:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Dadurch wird auch Ctrl+ zugeordnet Delete, um das Wort neben dem Cursor zu löschen.

Treviño
quelle
Funktioniert bei mir nicht.
Jonathan
6

Hier gibt es einige gute Antworten, aber ich habe es in Konsole mit Einstellungen-> Aktuelles Profil bearbeiten-> Tastatur-> Bearbeiten gelöst und dann eine Zuordnung von Backspace+Controlzu hinzugefügt \x17. (Ich habe den ASCII-Code für Ctrl-w mit gefunden showkey --ascii.)

Braden Anderson
quelle
Danke für den Hinweis auf die Sache mit showkey. So habe ich herausgefunden, dass ALT+Dzum Löschen Wort vor dem Cursor entsprechen würde \x1b\x64.
Loki
Danke, es hat mein Problem gelöst. In meinem Fall muss ich die Alt + Backspace und ihre Reihenfolge neu zuordnen \x1b\x7f.
DDMC
3

Das hängt davon ab, was Bash sieht. Bei einer normalen Terminal-Interaktion sieht bash nicht, welche Tastenmodifikatoren Sie gedrückt haben, sondern nur das resultierende Zeichen. Die Rücktaste ist zum Beispiel bereits die gleiche wie bei Control-H. Das Gedrückthalten von Shift oder Control macht keinen Unterschied.

JEDOCH kann Ihre Terminal-Anwendung (xterm? Cmd? Terminal? Putty? Abhängig von Ihrem Betriebssystem) Ihre Tastendrücke sehen und hat möglicherweise eine Möglichkeit, die Control-Backspace-Tastenkombination auf etwas abzubilden, das Bash von Backspace unterscheiden kann.

alexis
quelle
Ich habe festgestellt, dass meine Bash kein Backspace sieht. Aber vielleicht ist es möglich, dass es das sieht.
Adobe
@adobe, was meinst du? Geben Sie an Ihrem Terminal 'stty' ein und lesen Sie das Handbuch dazu. Wenn ^ H als Löschzeichen festgelegt ist, können Sie es auf etwas anderes festlegen ... wenn Sie einen guten Grund haben.
1
Ein gutes Beispiel dafür finden Sie unter github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole lässt dich das machen. Kopieren Sie eine der * .keytab-Dateien von / usr / share / kde4 / apps / konsole / nach ~ / .kde / share / apps / konsole und ändern Sie sie mit den Vorschlägen im obigen Link. Löschen Sie dabei die Zeile "key Backspace" und Beispiel: key Backspace-Shift-Control : "\x7f"und key Backspace-Shift+Control : "\E[9;3~"Ändern Sie auch die Titelzeile, während Sie gerade dabei sind keyboard "Xfree4 Modlist". Sie können dann "\e[9;3~": backward-kill-word"zu ~ / .inputrc
Adam
2

Versuche dies:

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

Fügen Sie optional ~ / .inputrc Folgendes hinzu, um es dauerhaft zu machen:

"\C-_": backward-kill-word

Arbeitet an Bash 4.3.11 in Kubuntu 14.04

Fitzy
quelle
2
Es ist unwahrscheinlich, dass Control-Backspace mit Control-Underscore identisch ist.
Thomas Dickey
1
Von all den Dingen, die ich in diesem Thread ausprobiert habe, hat dies funktioniert! Unter Verwendung von "GNU bash, Version 4.3.48 (1) -release (x86_64-pc-linux-gnu)" auf bash unter Windows / WSL
Markus Jevring
Das funktioniert bei mir mit cygwin sehr gut GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin).
Zagyi
1

In der Konsole:

  • klicken Settings -> Edit current profile
  • Klicken Sie auf die Registerkarte "Tastatur" -> [Edit...]
  • Klicken Sie auf die [Add]Schaltfläche und unter dem Key CombinationSpaltentyp Backspace+Ctrl. Im OutputSpaltentyp 0x08(der üblicherweise das Backspace-Zeichen ist)

Jetzt sollten Sie in der Lage sein, diesen Schlüssel backward-kill-wordvia zuzuordnen

# ~/.bashrc

bind '"\x08":backward-kill-word'
aaaaaa
quelle
Vielen Dank. Funktioniert bei mir, zumindest im xfce4-Terminal.
Limon
0

Auf den meisten Terminals sollte STRG + W bereits ein Wort rückwärts löschen. Dies funktioniert mit xterm und ich denke, es funktioniert mit konsole. STRG + W ist eine Standardtastenbelegung in textbasierten Programmen, die mit vim im Einfügemodus, mit Emacs und mit allen Shells zusammenarbeitet.


quelle
5
Ich habe Ctrl-w in Emacs, FireFox, Krusader auf "Tab schliessen" gesetzt - so dass es auch in Konsole eine Tab schliessende Kombination ist.
Adobe