Bash-Tastenkürzel wie Strg-C ändern?


21

Ich benutze Kubuntu 10.04. Ich möchte einige der Standard-Tastenkombinationen für Bash (Terminal) ändern.

Hier sind die Verknüpfungen, die ich einrichten möchte:

  • Ctrl- Cum den ausgewählten Text im Terminal in die Zwischenablage zu kopieren.

  • Ctrl- Vaus der Zwischenablage in das Terminal einfügen.

  • Ctrl- Zum die Bearbeitung der aktuellen Zeile im Terminal rückgängig zu machen.

  • Ctrl- Shift- C(oder noch besser Super- C), um den Befehl zu beenden.

  • Ctrl- Shift- Z(oder Super- Z) als Hintergrundbefehl.

  • Ctrl- Shift- V(oder Super- V) um der wörtliche Einfügebefehl zu sein (oder was auch immer Ctrl- zvorher getan hat).

Wie nehme ich diese Änderungen vor?

Übrigens gefällt mir, wie das Terminal unter OS X funktioniert. Durch die Verwendung der Befehlstaste werden alle Befehle zum Kopieren / Einfügen sehr konsistent (im Gegensatz zu vielen anderen Dingen in OS X).

PS Ich habe die Bash-Manpage gelesen und es hat nicht geholfen. Es gab mir Ideen, aber ich brauche spezifische Beispiele für die obigen Kombinationen. Vielen Dank.


einige dieser "shortcuts" können nicht in bash "implementiert" werden, sondern müssen auf dem terminal selbst abgelegt werden (xterm, gnome-terminal, konsole etc). zB "ausgewählter text", "zwischenablage"
akira

Antworten:


10

Dies sind keine Features von bash, sondern Features des Terminaltreibers. Als solche werden sie von angegeben stty(1).

$ stty -a
speed 38400 baud; rows 24; columns 80; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = M-^?; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
-ignbrk brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc ixany imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

5
OKAY. Danke für den Hinweis. Jetzt möchte ich mein Ziel noch erreichen. Und ich weiß auch, dass inputrc Strg-C neu zuordnen kann. Aber es ist mir wirklich egal, wie ich es mache, ich möchte nur wissen, wie diese Verknüpfungen in einem Terminal neu zugeordnet werden.
Paul

15
Hier ist der "Fisch": stty intr \ ^ k (wo der Beendigungsbefehl, früher Ctrl-C, jetzt Ctrl-K wird, K kann eine beliebige Alpha-Taste sein) Niemand "gab mir diesen Fisch". Ich habe hart gearbeitet, um es selbst zu finden. Wenn du also mit Sprichwörtern predigst, siehst du wie ein Idiot aus, IMO.
Paul

Wie können Sie es Strg + Umschalt + C neu zuordnen?
Crypdick

8

Dies ist jetzt fast vollständig gelöst. Ein Teil der Lösung wurde zuerst von MTK358 unter http://www.linuxquestions.org/questions/linux-software-2/change-bash-shortcut-keys-such-as-ctrl-c-818170/ erwähnt. . Er wies auf die Tatsache hin (ziemlich offensichtlich, sehr zu meiner Verlegenheit), dass die Tastenkombinationen zum Kopieren und Einfügen leicht über die Menüeinstellungen von konsole geändert werden können. Als ich das sah, dauerte es ungefähr 1 Minute, um Strg-C und Strg-V einzurichten, um sie mit dem Terminal zu kopieren und einzufügen.

Der andere Teil der Lösung hätte aus der stty-Manpage hervorgehen müssen, war es aber nicht (für mich). Am Ende habe ich nur experimentiert, basierend auf verschiedenen Hinweisen, wie den oben genannten.

Ich habe mich entschieden, welche nicht numerische Taste ich anstelle von Strg-C als Beendigungsbefehl verwenden möchte. (Ich habe "k" benutzt). Ich habe nie Informationen darüber gefunden, wie man einen Shift-Modifikator auf stty überträgt, also habe ich darauf verzichtet. Nach dieser Entscheidung musste ich nur Folgendes in die Befehlszeile eingeben:

stty intr \ ^ k

Ich habe überprüft, dass alles wie gewünscht funktioniert.

Jetzt musste ich nur noch den einzelnen Befehl (stty intr \ ^ k) in ein Startskript einfügen. Ich bin nicht sicher, welches das "richtige" ist. Ich möchte, dass diese Änderung systemweit und dauerhaft ist.

Irgendwelche Vorschläge, in welchem ​​Skript ich den Befehl platzieren soll?

Und schließlich sind die predigenden Antworten unnötig und nicht hilfreich.


Haben Sie jemals herausgefunden, welches "richtige" Startskript verwendet werden soll, oder wie Sie dies besser tun können? Ich habe mit dem gleichen Problem zu kämpfen (Ihre ursprüngliche Frage). Aber während ich 'stty intr \ ^ k' dazu bringen kann, Strg-K zu binden, wird Strg-C nicht aufgehoben, und weder 'stty intr undef' noch 'stty intr = ^ -' tun es, Strg-C sendet immer noch eine Unterbrechung . Und "stty -a" zeigt nie eine Änderung, die ich vorgenommen habe.
EricS

4

Einige davon können mit dem normalen KDE-Tastenkürzel eingestellt werden. Klicken Sie in der Konsole im Menü "Einstellungen" auf "Verknüpfungen konfigurieren" und Sie erhalten einen Dialog, in dem Sie die Tastenzuordnungen für die Funktionen ändern können, die von KDE ausgeführt werden. Auf diese Weise können Sie Strg + C zum Kopieren und Strg + V zum Einfügen neu zuordnen. Beachten Sie jedoch, dass diese Tastensequenzen dann nicht mehr an das Terminal weitergeleitet werden und Sie sie nicht mehr verwenden können Strg + C, um beispielsweise ein Programm zu unterbrechen.

Andere Funktionen werden von der readlineBibliothek gesteuert , die Sie durch Bearbeiten der Datei konfigurieren können ~/.inputrc. Sie möchten hinzufügen, dass Strg + Z alle in der aktuellen Zeile vorgenommenen Änderungen rückgängig macht

C-z: revert-line

sttyDa diese Tastenfolge wahrscheinlich bereits vom Terminal abgefangen wird , müssen Sie sie möglicherweise zum Aufheben der Bindung verwenden, bevor sie funktioniert. Suchen Sie zuerst ^Zin der Ausgabe von stty -a(wie in Ignacios Antwort gezeigt) und führen Sie dann beispielsweise, wenn es in angezeigt wird susp = ^Z, aus

stty susp ^-

um diese Tastenzuordnung zu lösen.

Die anderen Änderungen, nach denen Sie fragen, müssten vorgenommen werden, sttywie Ignacio sagt, da dies Terminalfunktionen sind, aber ich weiß nicht genau, wie. Das Problem ist, dass ich nicht weiß, ob das Terminal Shift erkennt, oder ob es weiß, wie diese Informationen an übermittelt werden sollen stty.


3

Bash verwendet emacsoder viModus in der Befehlszeile. Es gibt kein Konzept für "Auswahl" oder "Zwischenablage". Es werden Dinge wie "Kill Buffer" und "Point", "Mark", "Word", "Line", "Kill" und "Yank" usw. verwendet.

Der Versuch, Funktionen im GUI-Stil zu integrieren, ist bestenfalls frustrierend und funktioniert nicht vollständig. Sie müssen versuchen, Funktionen zu kombinieren stty, readlineund das Terminal (vermutlich Terminal.appfür Sie). Sie müssen Funktionen neu zuordnen wie intr, susp, lnextusw., so dass Sie immer noch ihre Funktionen nutzen können.

Ich empfehle dringend gegen solche radikalen Modifikationen. Es war einfach nicht dafür gedacht, das zu tun, was Sie wollen.

Wenn du in Rom bist...


Dave, könnte ich für ein System, das genau wie OS X funktioniert, die Verwendung von OS X vorschlagen? Wie Dennis angedeutet hat, werden Sie, selbst wenn Sie es zum Laufen bringen, ziemlich humpeln, wenn Sie sich als etwas anderes als Sie auf Ihrem eigenen Computer anmelden.
msw

Ich kann nicht für die anderen Befehle bürgen, aber das Kopieren und Einfügen macht in einem Befehlsfenster Sinn und ist sehr praktisch. Ich benutze sie ständig zum Kopieren und Einfügen zwischen anderen Fenstern und der Konsole, und das seit vielen Jahren. Shift-Ctrl-C und Shift-Ctrl-V funktionieren für Konsole sofort auf diese Weise. Und obwohl ich das seit Jahren jeden Tag mache, vergesse ich unweigerlich und drücke Strg-C in Konsole. Persönlich bin ich bereit, das Sprichwort "When in Rome" nicht mehr anzuwenden und es neu zuzuordnen, damit es wie praktisch JEDE andere Anwendung funktioniert, die es gibt.
EricS

1

Ich betreiben Ubuntu und änderte die Abkürzung für das Kopieren von dem Standard Ctrl+ Shift+ Czum normaleren und einfach Ctrl+ C. Dies ließ mich jedoch auf das Problem stoßen, dass ich den Interrupt-Befehl ^ C nicht senden konnte .

Dank @ Paul Antwort fand ich das Ausführen des Befehls

tty intr \^k

Erlaubt mir, den Interrupt-Befehl mit Ctrl+ zu senden K. Allerdings musste dieser Befehl jedes Mal ausgeführt werden, wenn ich das Terminal öffne, was ein Ärger ist (genau wie er selbst erwähnt hat).

Mit ein wenig weiterer Recherche (googeln 😂) habe ich herausgefunden, wie man bei jedem Öffnen des Terminals einen Befehl ausführt (in Ubuntu sowieso) .

Wenn Sie also endlich den folgenden Befehl (einmal) ausführen (in Ubuntu 18.04 und wahrscheinlich mehr), wird jedes Mal das erwartete Verhalten angezeigt.

echo $'# Make Ctrl+K interrupt command in terminal\nstty intr \^k\n' >> ~/.bashrc

Abschließend ist noch zu erwähnen, dass Sie den KButton nicht benutzen dürfen . Sie können den Buchstaben k in allen obigen Befehlen gegen einen beliebigen Buchstabenschlüssel Ihrer Wahl austauschen .

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.