Aktivieren Sie in der CentOS-Befehlszeile Alt / Strg + Links / Rechts

5219
Rudie

Mein Hoster hat kürzlich ein neues CentOS auf den neuesten Stand gebracht und ich habe ihn "personalisiert" und jetzt fehlt mir etwas.

Auf meinem Ubuntu-Server zu Hause kann ich das forward-wordund backward-wordmit ALT+ RIGHT/ LEFT. Ich habe nichts dafür gemacht. Ich kann auch ein Wort ALT+ BACKSPACElöschen.

Auf meinem neuen CentOS kann ich das ALT+ machen BACKSPACE, aber das ALT+ RIGHT/ kann nicht LEFTfunktionieren! ALT+ B/ Fwork, aber das ist einfach nicht akzeptabel, weil es nur für die Linke funktioniert ALTund meine Finger nicht so schlank sind. (Rechts ALT+ B/ Fdruckt nur "b" oder "f")

Ich habe versucht, einen Teil von / etc / inputrc nach CentOS zu kopieren, aber das tut nichts.

ALToder CTRL, es ist mir egal, aber ich brauche wirklich eine Verknüpfung. Das letzte CentOS hatte es nicht, aber seit Ubuntu habe ich es auf CentOS vermisst.

Mein CentOS /etc/inputrc:

"\e[5C": forward-word "\e[5D": backward-word "\e[1;5C": forward-word "\e[1;5D": backward-word 

Mein Ubuntu /etc/inputrc:

"\e[1;5C": forward-word "\e[1;5D": backward-word "\e[5C": forward-word "\e[5D": backward-word "\e\e[C": forward-word "\e\e[D": backward-word 

Ich weiß nicht mal was sie bedeuten!? Was ist [1;5Cfür den Schlüssel?

7
Ich benutze nur die ersten 2 Zeilen (`\ e [1; 5C` und` \ e [1; 5D`), die Sie von Ihrem Ubuntu-Inputrc in meinem `~ / .inputrc` zitieren, und es funktioniert gut für Debian, Ubuntu und Arch . terdon vor 11 Jahren 0
Für `ALT` oder` CTRL`? Da diese da drin sind, sollten sie funktionieren, würden Sie nicht denken? Zwei von ihnen müssen "B" und "F" sein, würde ich denken. Linux ist komisch. Rudie vor 11 Jahren 0
Sie arbeiten für "CTRL". Mein _Glaube_ ist, dass Reihenfolge wichtig ist, einer kann den anderen überschreiben. Außerdem haben lokale Einstellungsdateien (z. B. ~ / .inputrc) Vorrang vor systemweiten. Wenn also irgendwo ein seltsamer Konflikt auftritt, kann dies durch eine lokale Datei behoben werden. terdon vor 11 Jahren 0

3 Antworten auf die Frage

8
terdon

Dank Ihrer Frage habe ich endlich etwas gelesen und mein Verständnis erweitert, Prost!

Eine sehr gute Informationsquelle ist also man readline. Die in den verschiedenen inputrcDateien angegebenen Tastenkombinationen steuern die Funktionsweise der BASH-Readline-Bibliothek. Entsprechend der Readline-Manpage können Sie entweder symbolische Schlüsselnamen oder Escape-Sequenzen verwenden:

 Key Bindings The syntax for controlling key bindings in the inputrc file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be specified in one of two ways: as a sym‐ bolic key name, possibly with Meta- or Control- prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon.  When using the form keyname:function-name or macro, keyname is the name of a key spelled out in English. For example:  Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" 

Die Manpage gibt außerdem an, dass es sich bei der Standardkonfigurationsdatei um ~/.inputrcdie Bindungen handelt.

Wenn Sie normale Buchstabentasten (zum Beispiel Control- g) verwenden möchten, Control-g: forward-wordfunktioniert dies einwandfrei. Die Pfeiltasten sind härter. Ich habe versucht, und es versäumen, den Schlüssel zu finden Namen für die Pfeiltasten. Keiner von denen, die ich versuchte, ( left-arrow, left, :left) gearbeitet, so scheint es, wie wir mit den Escape - Sequenzen stecken.

Leider unterscheidet sich die genaue Escape-Sequenz zwischen den Terminalemulatoren (deshalb hatte Ihr Ubuntu-Inputrc mehrere Zeilen). Um herauszufinden, welche Escape-Sequenz Ihr bevorzugtes Terminal verwendet, führen readSie die gewünschte Tastenfolge aus und geben Sie sie ein. In terminator, xtermund gnome-terminal, Control- Leftgeben Sie Folgendes ein:

$ read ^[[1;5D 

in aterm:

$ read ^[Od <-- that is a capital O not a zero (0). 

Durch ein wenig Experimentieren habe ich herausgefunden, dass es ^[[Dist Leftund ^[[1;5Dist Control- Left. Der erste ^[ist der EscSchlüssel, der hier verwendet wird, um eine Escape-Sequenz zu bezeichnen .

Auf jeden Fall zu binden Control- Leftzu forward-wordin einer Weise, die für alle funktioniert, ich diese Zeilen zu meinem hinzugefügt ~/inputrc:

"\e[1;5D": backward-word "\eOd": backward-word 

Aus Gründen, die ich nicht vollständig verstanden habe, Controlsoll dargestellt werden, \ewelche sein sollen Esc.

Meine endgültige ~/.inputrcDatei, die für alle oben aufgeführten Terminals funktioniert, lautet:

"\e[1;5D": backward-word "\eOd": backward-word "\e[1;5C": forward-word "\eOc": forward-word 
JA JA JA! Du bist mein absoluter Held! Es ist jetzt perfekt! Meine kleine Air-Tastatur verwendet jetzt die Pfeiltasten nach rechts und die Haupt- / Desktop-Tastatur verwendet jetzt die Alt-Pfeiltasten nach links. Perfekt!! Irgendwie löst das rechte Alt meines Air-Keyboards nichts bei "read" aus ... Wahrscheinlich ist das Keyboard defekt (eine spezielle Funktion !?). Genial! Du der Mann! Rudie vor 11 Jahren 1
Meine Einstellungen sind ein wenig anders: Strg links / rechts: `\ eOD` /` \ eOC` und Alt links / rechts: `\ e \ e [D` /` \ e \ e [C]. Gott sei Dank ist es eine lesbare, sinnvolle Syntax wie diese, richtig !? Linux rockt! Rudie vor 11 Jahren 0
Ja, ich muss zugeben, die Syntax könnte besser sein, wahrscheinlich ein historisches Relikt. Schön, dass es funktioniert! terdon vor 11 Jahren 0
1
N D

How to do it in Iterm2 so that it works when you connect to any host.

Note: I only write this because, another question (https://superuser.com/questions/1042937/getting-ctrlarrows-to-move-word-at-a-time-on-newest-iterm2?rq=1) has linked to this question as a duplicate, but this question does not answer how to do this in Iterm2, so it isn’t really a duplicate.

If you are on OS X and using Iterm2 you can map Alt/Ctrl+→ (right arrow) and Alt/Ctrl+ to the standard readline commands Meta+F and Meta+B. In the example below it is assumed that the escape key is meta. To do this, open Iterm2.

  1. Click: Menu -> Preferences...
  2. Click “Profiles” tab.
  3. Click your profile or the default one.
  4. Click the “Keys” sub tab.
  5. Click the “+” plus sign next to “Load Preset…”
  6. Type your keyboard shortcut in the first field (e.g., Ctrl+)
  7. Choose either “Send Text”, “Send Hex” (more on sending Hex in “How to bind a key sequence to the control key” below) or “Send Escape Sequence”. In this case we are using "Send Escape Sequence”.
  8. In the last field choose characters that readline can interpret.
  9. ^[ is the readline sequence for escape. This entry maps Opt+ to Esc+F (may be Alt+F in other terminals)

key mapping window example

How to map shortcuts to non-escape sequences (Ctrl, Alt, Cmd, etc.)

  1. Download “Key Codes” from the app store. Install it and open it.
  2. While in an open Key Codes window, hit the Ctrl+[some key], in this case I’ll use Ctrl+W for deleting a previous word in readline.
  3. Note the “Unicode” field.
  4. Now map your key sequence using in iterm, preferences->Keys->+ (the sequence provided above).
  5. Enter “Keyboard Shortcut” field something like in this situation Opt+Backspace.
  6. Change “Action” to “Send Hex Code”.
  7. Enter in last field the previously noted hex; in this case, 23 / 0x17.
  8. Click “OK" and the shortcut should now be operational in your terminal window and work on any system where readline is available.
0
Walf

Danke für die Frage. Hatte dieses Problem mit PuTTY unter CentOS 7 und löste es, indem es innerhalb der $if mode=emacsBedingung hinzugefügt wurde :

# for PuTTY "\e\e[C": forward-word "\e\e[D": backward-word 

Aktivierte die Einstellung mit Ctrl+ Xdann Ctrl+R