Les touches Home, End, PageUp, PageDown tapent toutes un ~
dans ma 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) saisit 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 le répertoire home , mais les réponses disent que ce n’est pas le cas.)
Changez la chaîne de type terminal sous l'onglet Connexion> Données du «xterm» par défaut en «linux». Cela a fonctionné pour moi.
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 correctes installées.
Sur les systèmes Debian, le paquet ncurses-term (version 5.7 + 20081213-1) inclut les fichiers de définition de terminfo pour PuTTY , PuTTY-256color et PuTTY-vt100 terminal les types. Si ce paquet est 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 (Connexion -> Données).
Stephen Irons mentionne également "linux" comme un autre type de terminal qui fonctionne; Je crois 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.)
Si vous souhaitez vérifier le code 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, appuyer sur la touche Accueil générera 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 fichier ~/.inputrc
dans votre dossier $HOME
ou alternativement un fichier /etc/inputrc
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 chaque caractère ^ [par l'équivalent\e chaîne}
Dans mon exemple, je vais ajouter une ligne avec mon code de clé Home et l'action début-de-ligne (liée par défaut à Ctrl+A
dans Bash):
"\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) disponible sur cette page de référence .
Ctrl + A vous amène au début de la ligne
Voici une liste des raccourcis clavier Bash } _
Ce qu’il envoie réellement, c’est ^[[1~
, qui est une séquence d'échappement terminal composée de:
Vous pouvez voir cela en appuyant sur Ctrl+V puis 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 rend la séquence d'échappement ^[[H
ou en modifiant le $ TERM que vous utilisez (ou en modifiant ~/.inputrc
).
Au fait, il n’ya pas de relation entre le tilde que vous obtenez lorsque vous appuyez sur Home et le tilde qui représente le répertoire de base. Par exemple, dans ma configuration Page-Down produit ^[[6~
qui imprimera également un tilde s'il n'est pas interprété correctement.
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
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
À utiliser avec prudence cependant, car toutes ces touches de raccourci Bash ne fonctionnent pas dans d'autres programmes.