Comment configurer PuTTY pour que Home / End / PgUp / PgDn fonctionne correctement sous bash?

123

Les touches Home, End, PageUp, PageDown saisissent toutes une ~session bash au lieu de déplacer le curseur / la vue. Pourquoi cela se produit-il et quels paramètres dois-je modifier?

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

La question se lit à l'origine:

Dans PuTTY, pourquoi appuyer sur la touche "Home" du shell (bash) tape un "~"? Ou plutôt, comment faire bouger le curseur au début de la commande que j'ai tapée?

(Je pensais que la raison était que ~ est la maison répertoire, mais les réponses disent que c'est pas.)

RomanSt
la source

Réponses:

150

Changez la chaîne de type terminal sous l'onglet Connexion> Données du «xterm» par défaut à «linux». Cela a fonctionné pour moi.

entrez la description de l'image ici

Der Hochstapler
la source
2
Merci! J'ai eu ce problème après avoir essayé de faire fonctionner Ctrl Gauche / Droite en utilisant cette méthode ( superuser.com/a/103097/45410 ).
Edwin Yip
4
Emphase: pas Terminal -> Keyboard"Les touches de fonction et le clavier".
Elazar
2
Cela fonctionne mais crée d'autres problèmes, tels que la désactivation de la prise en charge de la souris. donc, ce n'est pas une solution acceptable pour moi
Anton
Cette solution active également les trémas à l'intérieur du mastic lors de la connexion à OS X!
singe lorem
42

Cela se produit parce que le type de terminal de PuTTY n'est pas défini correctement ou parce que votre serveur n'a pas les définitions terminfo appropriées installées.

Sur les systèmes Debian, le paquet ncurses-term (version 5.7 + 20081213-1) comprend des fichiers de définition terminfo pour les types de terminaux putty , putty-256color et putty- vt100 . Si vous avez ce paquet installé, vous pouvez définir la "chaîne de type terminal" sur "putty" au lieu du "xterm" par défaut dans la configuration de session de Putty (Connection -> Data).

Stephen Irons mentionne également "linux" comme un autre type de terminal qui fonctionne; Je pense que cela est correct, mais je ne l’ai pas testé récemment.

Sur mes systèmes, cela permet à Home et End de fonctionner correctement, bien que PageUp / PageDown ne fait pas défiler la fenêtre de la console. (Ils fonctionnent correctement dans les applications ncurses telles que aptitude et Shift-PgUp / Shift-PgDn font défiler la fenêtre de la console.)

Quack Quack
la source
Oui, utiliser TERM=puttyou TERM=putty-256colorest le plus sage, bien que, malheureusement, pour le moment, cette dernière ne semble pas fonctionner correctement pour les couleurs 8-15 (qui sont supposées être les versions lumineuses de 0-7). Les autres "solutions" sont très susceptibles de se dégrader font parfois à leur indifférence flagrante des différences entre les terminaux impliqués.
SamB
yum install ncurses-termtrié pour moi sur CentOS 7 avec du mastic sur la prochaine connexion, merci.
Wandering Zombie
1
régler le type de terminal sur puttyfonctionne mais casse la prise en charge de la souris analogue à xterm (par exemple pour Midnight Commander)
Anton
L'installation de 'ncurses-term' a fonctionné pour moi sur les tests Debian.
hochl
Aucun de ceux-ci ne fonctionne pour moi, je suis sur mastic se connecter à centos, et ne peut pas exécuter yum install ncurses-term parce que je ne suis pas root.
Herman Toothrot
20

Si vous souhaitez vérifier quel code est envoyé par PuTTY à votre terminal lorsque vous appuyez sur une touche ou sur une combinaison de touches, il vous suffit d'émettre un Ctrl+V, puis d'appuyer sur la touche souhaitée.

Par exemple, sur ma boîte, une pression sur la touche Home génère la chaîne suivante sur mon terminal:

^[[1~

Cela signifie que PuTTY envoie le caractère d'échappement ^ [ suivi de la chaîne [1 ~ .

Vous pouvez créer un ~/.inputrcfichier dans votre $HOMEdossier ou un /etc/inputrcfichier en fonction de votre système. Ensuite, remplissez ce fichier avec les codes PuTTY et les actions Bash correspondantes que vous souhaitez déclencher par Bash.

Remarque: remplacez tous les caractères ^ [ par la chaîne équivalente \ e

Dans mon exemple, je vais ajouter une ligne à mon accueil code clé et le début de ligne action (qui par défaut est lié à Ctrl+ABash):

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

Pour info, mon fichier inputrc a le contenu suivant:

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

De @Cimbali: plus de commandes pouvant être reliées (comme previous-history: déplacer vers le haut dans la liste d'historique) disponibles sur cette page de référence .

Damien Garrido
la source
OUI ! Finalement ! La chaîne de type terminal de Putty ne faisait rien pour les mots en arrière et les mots en avant. C'est bien !
Cimbali
1
Ceci est la seule solution acceptable , car TERM=linuxou TERM=puttybriser le soutien de la souris xterm-like. Merci!
Anton
14

CTRL + A vous emmène au début de la ligne

Voici une liste de raccourcis clavier Bash

Iain
la source
13
C’est génial et tout, sauf que les programmes Home / End sont câblés dans mon cerveau et, comme je n’administre le serveur qu’une seule fois dans une lune bleue, les chances de désapprendre le câblage sont minces.
RomanSt
9

Ce qu’il envoie réellement ^[[1~est une séquence d’échappement terminal composée de:

  • ^ [- échapper
  • [- crochet gauche
  • 1 un
  • ~ - tilde

Vous pouvez voir cela en appuyant sur Ctrl+ Vpuis sur Home.

Vous pourrez peut-être résoudre votre problème en modifiant le paramètre du clavier PuTTY pour les touches Home et End en rxvt (ce qui crée la séquence d'échappement ^[[Hou en modifiant le $ TERM que vous utilisez (ou en le modifiant ~/.inputrc).

En passant, il n'y a pas de relation entre le tilde que vous obtenez lorsque vous appuyez sur Homeet le tilde qui représente le répertoire de base. Par exemple, dans ma configuration, les Page-Downproduits ^[[6~qui imprimeraient également un tilde s’il n’était pas interprété correctement.

Dennis Williamson
la source
Merci! rxvt a corrigé la touche Home; la touche End produit maintenant un ding. PgUp / Down est effectivement en train de taper ~, et aucun des paramètres du clavier PuTTY ne les fait fonctionner. Ma bash est-elle gâchée ou est-ce "normal"?
RomanSt
Qu'est-ce que vous obtenez quand vous tapez echo $TERM?
Dennis Williamson
xterm(Limite de 15 caractères)
RomanSt
3
Vous pouvez essayer d’ajouter "\eOw": end-of-line(il s’agit d’une lettre majuscule O) à votre ~/.inputrcfichier.
Dennis Williamson
Touche de fin fixe; Je comprends l'idée. Vraiment, des hacks comme ceux-là n'étaient pas nécessaires cependant ...
RomanSt
2

Aucune de ces options n'a fonctionné pour moi. J'utilise un ancien système AIX. J'ai dû ajouter les alias suivants à mon .profile

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
Un camion
la source
ça ne marche pas pour moi
Herman Toothrot
1

Je ne pouvais pas le faire fonctionner avec d'autres méthodes. J'ai cependant créé ce script AutoHotkey qui fonctionne, tant que votre shell est Bash:

#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

Utilisez-le avec prudence , car toutes ces touches de raccourci ne fonctionnent pas dans d'autres programmes.

Ciantique
la source
Cela altérerait la principale raison pour laquelle je regarde ceci: screenqui avec les paramètres par défaut casse Ctrl-A parce qu'il utilise comme un caractère d'évasion ....
Gert van den Berg