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.)

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


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.)


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 .


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


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.


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

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.


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
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.