<Ctrl> + <backspace> zum Löschen von Wörtern im Gnome-Terminal- und Vim-Einfügemodus

10

Es scheint, als würde ctrl+ Wein Wort nach dem anderen rückwärts löschen. Das ist großartig, aber ich würde wirklich sehr gerne, dass dies mit ctrl+ backspacewie den meisten anderen Apps funktioniert .

Was ist der beste Weg, dies zu tun? Ich würde die Änderung benötigen, um Gnome-Terminal-Befehle, Befehlszeilen-Vim und GUI-Vim zu beeinflussen.

Costa
quelle
1
In vim können Sie dann D drücken, B und es wird das gleiche tun. Ich vermisse diese Funktion jedoch auch im Terminal, da Sie aussteigen müssen und sie im Einfügemodus nicht funktioniert. Toller Tipp für STRG + W.
mchid

Antworten:

7

Beachten Sie, dass dies im Terminal und im Standard-Emacs-Modus funktioniert (den Sie verwenden, wenn Ctrl+ Wdas vorherige Wort für Sie löscht). Es funktioniert nicht im vi-Modus von bash und hat keinen Einfluss auf vi / vim. Dies ist daher nur eine teilweise Antwort, aber das Beste, was dieser Emacs-Benutzer bieten kann.


Diese Art von Dingen wird von der readlineBibliothek verwaltet, deren Verhalten über gesteuert werden kann ~/.inputrc. Bearbeiten (oder erstellen, falls nicht vorhanden) ~/.inputrcund fügen Sie diese Zeile hinzu:

"\C-H":"\C-W"

Öffnen Sie jetzt ein neues Terminal und es sollte funktionieren.

Erläuterung

Das \C-Hist eigentlich Control+ BackSpace. Sie können die Schlüsselcodes anzeigen, indem Sie Ctrl+ und Vdann die Taste drücken , nach der Sie suchen . Sie werden sehen, dass BackSpacezurückkehrt ^H.

Jetzt sollte es möglich sein, Control+ BackSpacean die Bash-Funktion zu binden , die das vorherige Wort ( backward-kill-wordoder unix-word-rubout) mit löscht "\C-H": backward-kill-word. Ich kann das jedoch nicht zum Laufen bringen. Es funktioniert perfekt mit verschiedenen Tasten ( "\C-E": backward-kill-wordz. B. macht Ctrl+ Elöscht das vorherige Wort), aber aus irgendeinem Grund kann ich es nicht zum Laufen bringen BackSpace.

So, wie dieses Problem zu umgehen, bilden wir nur Ctrl+ Backspacezu Ctrl+ W, die bereits zugeordnet ist backward-kill-word. Wenn Sie also Ctrl+ drücken Backspace, wird dies in Ctrl+ übersetzt, Wdas wiederum gesendet wird backward-kill-word. Die Idee für diese Problemumgehung habe ich in diesem SU-Beitrag erhalten .

Terdon
quelle
4

Bis vor kurzem hat gnome-terminal den gleichen Code für Backspaceund Ctrl+ Backspaceausgegeben, daher können Sie die beiden in Ihrer Anwendung nicht unterscheiden.

Dies wurde in vte-0.42 behoben, das Teil von Gnome 3.18 ist, das diesen Herbst veröffentlicht wurde.

Wenn Sie Wily verwenden, finden Sie aktualisierte Pakete in Gnome3 Staging .

egmont
quelle
Kann ich dies vertrauenswürdig ausführen, ohne diese riesige PPA hinzuzufügen?
Ciprian Tomoiagă
Nicht ohne das libvte 2.90-Paket herunterzuladen, zu patchen, zu kompilieren und zu installieren, das vertrauenswürdig ist. Der Patch befindet sich unter bugzilla.gnome.org/show_bug.cgi?id=733246 .
Egmont
3

Verwenden Sie stattdessen Alt+ Backspace: Es funktioniert genau wie Ctrl+ Backspaceund erfordert keine Konfiguration.

Marco Lackovic
quelle
1

Es funktioniert auf meiner Maschine. Stellen Sie einfach sicher, dass Sie tmux von master und nvim von linuxbrew verwenden und control + backspace auch in bash und vim funktioniert!

(Holen Sie sich Bash auch von Linuxbrew)

Fábio Santos
quelle