Wie konfiguriere ich PuTTY, damit Home / End / PgUp / PgDn in bash richtig funktioniert?

123

Die Tasten "Home", "End", "PageUp" und "PageDown" geben ~in meiner Bash-Sitzung ein "a" ein, anstatt den Cursor / die Ansicht zu bewegen. Warum passiert das und welche Einstellungen muss ich ändern?

GNU bash, version 4.0.28(1)-release (x86_64--netbsd)
PuTTY v0.60

Die Frage lautete ursprünglich:

Warum wird in PuTTY durch Drücken der Taste "Home" auf der Shell (Bash) ein "~" eingegeben? Oder wie bringe ich den Cursor an den Anfang des Befehls, den ich eingegeben habe?

(Ich dachte , der Grund war , dass ~ das ist Heimat - Verzeichnis, aber die Antworten sagen , dass dies nicht so ist.)

RomanSt
quelle

Antworten:

150

Ändern Sie die Zeichenfolge vom Typ Terminal auf der Registerkarte Verbindung> Daten von der Standardeinstellung "xterm" in "linux". Es hat bei mir funktioniert.

Bildbeschreibung hier eingeben

Der Hochstapler
quelle
2
Vielen Dank! Ich hatte dieses Problem, nachdem ich versucht hatte, Strg Links / Rechts mit dieser Methode arbeiten zu lassen ( superuser.com/a/103097/45410 ).
Edwin Yip
4
Betonung: nicht Terminal -> Keyboard"Die Funktionstasten und Tastatur".
Elazar
2
Es funktioniert, verursacht jedoch andere Probleme wie das Deaktivieren der Mausunterstützung. Daher ist es keine akzeptable Lösung für mich
Anton
Diese Lösung ermöglicht auch Umlaute in Putty, wenn Sie eine Verbindung zu OS X herstellen!
Lorem Monkey
42

Dies geschieht, weil der Terminaltyp von PuTTY nicht richtig eingestellt ist oder weil auf Ihrem Server nicht die richtigen Terminfodefinitionen installiert sind.

Auf Debian-basierten Systemen, die ncurses-term - Paket (Version 5.7 + 20081213-1) enthält termDefinitionsDateien für Kitt , Kitt-256color und Kitt-VT100 Terminaltypen. Wenn Sie dieses Paket installiert haben, können Sie in der Sitzungskonfiguration von Putty (Verbindung -> Daten) die Zeichenfolge vom Typ "Terminal" auf "putty" anstelle der Standardeinstellung "xterm" setzen.

Stephen Irons erwähnt auch "Linux" als einen anderen Terminaltyp, der funktioniert; Ich glaube, dies ist aus früheren Erfahrungen richtig, habe es aber in letzter Zeit nicht getestet.

Auf meinen Systemen funktionieren Home und End auf diese Weise ordnungsgemäß, obwohl PageUp / PageDown das Konsolenfenster nicht scrollen. (Sie funktionieren ordnungsgemäß in ncurses-Anwendungen wie aptitude und scrollen mit Shift-PgUp / Shift-PgDn im Konsolenfenster.)

Quacksalber
quelle
Ja, die Verwendung von TERM=puttyoder TERM=putty-256colorist am klügsten, obwohl letzteres derzeit leider nicht für die Farben 8-15 (die die hellen Versionen von 0-7 sein sollen) geeignet zu sein scheint. Es ist sehr wahrscheinlich, dass die anderen "Lösungen" manchmal herausplatzen, weil sie die Unterschiede zwischen den beteiligten Terminals offenkundig missachten.
SamB
yum install ncurses-termsortierte es für mich auf CentOS 7 mit Kitt beim nächsten Login, danke.
Wandering Zombie
1
Festlegen des Terminaltyps auf "Funktioniert" putty, unterbricht jedoch die xterm-ähnliche Mausunterstützung (z. B. für Midnight Commander)
Anton
Die Installation von 'ncurses-term' funktionierte für mich beim Testen von Debian.
Hochl
keins davon funktioniert für mich, ich bin auf putty und verbinde mich mit centos und kann yum install ncurses-term nicht ausführen, weil ich kein root bin.
Herman Toothrot
20

Wenn Sie überprüfen möchten, welcher Code von PuTTY an Ihr Terminal gesendet wird, wenn Sie eine Taste oder eine Tastenkombination drücken, müssen Sie nur a eingeben Ctrl+Vund dann die gewünschte Taste drücken.

Wenn Sie beispielsweise auf meiner Box die Home- Taste drücken, wird auf meinem Terminal die folgende Zeichenfolge generiert:

^[[1~

Das heißt, PuTTY sendet das Escape-Zeichen ^ [ gefolgt von der Zeichenfolge [1 ~ .

Sie können eine ~/.inputrcDatei in Ihrem $HOMEOrdner erstellen oder alternativ eine /etc/inputrcDatei, die von Ihrem System abhängt. Füllen Sie diese Datei dann mit den PuTTY-Codes und den entsprechenden Bash-Aktionen, die von Bash ausgelöst werden sollen.

Hinweis: Ersetzen Sie jedes ^ [ Zeichen durch die entsprechende \ e Zeichenfolge

In meinem Beispiel werde ich eine Zeile mit meinem Home- Tastencode und der Zeilenanfangsaktion (die standardmäßig Ctrl+Ain Bash festgelegt ist) hinzufügen :

"\e[1~": beginning-of-line

Zu meiner Information, meine InputRC-Datei hat den folgenden Inhalt:

set meta-flag on
set input-meta on
set convert-meta off
set output-meta on
"\e[1~": beginning-of-line     # Home key
"\e[4~": end-of-line           # End key
"\e[5~": beginning-of-history  # PageUp key
"\e[6~": end-of-history        # PageDown key
"\e[3~": delete-char           # Delete key
"\e[2~": quoted-insert         # Insert key
"\eOD": backward-word          # Ctrl + Left Arrow key
"\eOC": forward-word           # Ctrl + Right Arrow key

Von @Cimbali: Weitere bindbare Befehle (wie "Vorheriger Verlauf": "Nach oben" in der Verlaufsliste) sind auf dieser Referenzseite verfügbar .

Damien Garrido
quelle
JA ! Schließlich ! Die terminalartige Zeichenfolge von Putty hat nichts für das Rückwärts- und das Vorwärtswort getan. Das ist toll !
Cimbali
1
Dies ist die einzig akzeptable Lösung , da TERM=linuxoder TERM=puttyxterm artige Maus - Unterstützung brechen. Vielen Dank!
Anton
14

Strg + A bringt Sie zum Zeilenanfang

Hier ist eine Liste der Bash-Tastaturkürzel

Iain
quelle
13
Das ist großartig, aber Home / End sind in meinem Gehirn fest verdrahtet, und da ich den Server nur einmal in einem blauen Mond verwalte, ist die Wahrscheinlichkeit, dass ich die Festverdrahtung verlerne, gering.
RomanSt
9

Was es tatsächlich sendet ^[[1~, ist eine terminale Escape-Sequenz, bestehend aus:

  • ^ [- Flucht
  • [- linke eckige Klammer
  • 1 Eins
  • ~ - Tilde

Sie können sehen , dass durch Drücken der Taste Ctrl+ Vdann Home.

Möglicherweise können Sie Ihr Problem beheben, indem Sie die PuTTY-Tastatureinstellung für die Home- und End-Tasten in rxvt ^[[Händern (wodurch die Escape-Sequenz erstellt wird) oder indem Sie den von Ihnen verwendeten $ TERM ändern (oder bearbeiten ~/.inputrc).

Übrigens gibt es keine Beziehung zwischen der Tilde, die Sie erhalten, wenn Sie drücken, Homeund der Tilde, die das Basisverzeichnis darstellt. In meinem Setup wird beispielsweise Page-Downerzeugt ^[[6~, dass auch eine Tilde gedruckt wird, wenn sie nicht richtig interpretiert wird.

Dennis Williamson
quelle
Vielen Dank! rxvt hat die Home-Taste repariert; Die Ende-Taste erzeugt jetzt einen Klingelton. PgUp / Down geben Sie in der Tat ein ~und keine der PuTTY-Tastatureinstellungen bewirkt, dass sie funktionieren. Ist meine Prügelei durcheinander oder ist das "normal"?
RomanSt
Was bekommst du, wenn du tippst echo $TERM?
Dennis Williamson
xterm(
Maximal
3
Sie können versuchen "\eOw": end-of-line, Ihrer ~/.inputrcDatei einen Buchstaben O hinzuzufügen .
Dennis Williamson
Endetaste behoben; Ich habe die Idee.
Wünschte
2

Keine dieser Optionen hat bei mir funktioniert. Ich verwende ein altes AIX-System. Ich musste meinem .profile den folgenden Alias ​​hinzufügen

alias __A=$(print '\0020') # ^P = up = previous command
alias __B=$(print '\0016') # ^N = down = next command
alias __C=$(print '\0006') # ^F = right = forward a character
alias __D=$(print '\0002') # ^B = left = back a character
LKW
quelle
funktioniert nicht für mich, Mist
Herman Toothrot
1

Ich konnte es nicht mit anderen Methoden zum Laufen bringen. Ich habe jedoch dieses AutoHotkey-Skript erstellt, das funktioniert, solange Ihre Shell Bash ist:

#IfWinActive ahk_class PuTTY
PgUp::Send +{PgUp}
PgDn::Send +{PgDn}
Home::Send ^a   ; beginning of line
End::Send ^e    ; end of line
+^Del::Send ^k  ; delete whole line after cursor
+End::Send ^k   ; delete whole line after cursor
+Home::Send ^u  ; delete whole line before cursor
^Del::Send !d   ; delete word after cursor
^BS::Send ^w    ; delete word before cursor
^Left::Send !b  ; jump word left
^Right::Send !f ; jump word right
#IfWinActive

Seien Sie jedoch vorsichtig , da nicht alle dieser Bash-Hotkeys in anderen Programmen funktionieren.

Ciantic
quelle
Dies würde mit dem Hauptgrund, warum ich mir das anschaue, zu schaffen machen:, screender mit den Standardeinstellungen Strg-A unterbricht, weil er es als Escape-Zeichen verwendet ....
Gert van den Berg