La touche d'accueil ne fonctionne pas dans le terminal

13

J'utilise GNOME Terminal 2.7.3 et zsh 4.3.9 (x86_64-unknown-linux-gnu)

Homeet Endne fonctionnent pas. Rien ne se passe et rien ne s'affiche lorsque j'appuie dessus. mais ils fonctionnent lorsque j'appuie sur shift + Home(Fait défiler jusqu'au début de la sortie du shell.) et fonctionnent également dans d'autres programmes GUI. J'ai googlé et essayé ce qui suit. Pas de changement :(

  885  bindkey "\e[1~" beginning-of-line
  886  bindkey "\e[H" beginning-of-line
  887  bindkey "\e1~" beginning-of-line
  888  bindkey "\eH" beginning-of-line
  889  bindkey "\e[0H" beginning-of-line

PS: Lorsque je suis dans le dernier onglet et appuyez sur Ctrl + pagedownje ;5~m'imprime à l'écran. Est-ce que cela donne un indice?

balki
la source
Avez-vous un .inputrcdans votre répertoire personnel? Cela se produit-il avec un utilisateur fraîchement créé? Cela s'est-il toujours produit ou a-t-il commencé un jour?
bahamat
Non, je n'en ai pas .inputrc. Je n'ai pas l'autorisation de créer un nouvel utilisateur. C'était toujours comme ça. Je vis avec ctrl +aet ctrl+e.
balki
1
Je suppose que dans ce cas, je ne proposerai pas ctrl+a& ctrl+e;-)
bahamat

Réponses:

3

Je suis sur fedora maintenant mais je vous suggère de lire attentivement le wiki d'Archlinux , tout cela: les touches Accueil et Fin ne fonctionnent pas .

Ce que j'ai fait pour le réparer:

  1. Appuyez sur Ctrl-V Accueil, la séquence d'échappement pour la touche Accueil est imprimée. Ce n'est pas \e[4~ et \e[1~comme je m'y attendais en regardant /etc/inputrc. C'était [Het[F

  2. Extraire les informations du terminal infocmp $TERM >terminfo.src

  3. Ouvrez ce fichier pour le modifier, par exemple vim terminfo.src, recherchez khomeet kendil est affecté à quelque chose, disons khome=\E[1~et kend=\E[4~qui ne fonctionne pas dans ce cas. supprimez-le et remplacez-le par la séquence que vous avez trouvée à l'étape 1, donc pour moi, après l'avoir modifiée, c'était: khome=\E[Het kend=\E[F.

  4. Si vous voulez jouer en toute sécurité, assurez-vous [Fque [H(ou la séquence que vous venez d'utiliser) n'est pas affectée à autre chose ou les choses seront gâchées!

  5. exécuter tic terminfo.srcqui crée le ~/.terminforépertoire.

  6. En plus de .zshrctoutes les autres commandes, mettez:export TERMINFO=~/.terminfo

Ouvrez une nouvelle fenêtre de terminal et tout devrait bien se passer, la maison et la fin doivent fonctionner maintenant.

PS: La méthode bindkey devrait théoriquement fonctionner et est plus facile, mais ce n'est pas le cas pour moi.

hkoosha
la source
6

Les séquences d'échappement envoyées par les touches de fonction et de curseur se composent d'un caractère d'échappement suivi de caractères imprimables. Appuyez sur Ctrl+ Vpuis Home. Cela insérera la séquence d'échappement littéralement. Ajoutez ensuite une bindkeyinstruction à votre ~/.zshrc.

L'instruction est susceptible d'être (notez Opas 0):

bindkey '\e[OH' beginning-of-line
bindkey '\e[OF' end-of-line
Gilles 'SO- arrête d'être méchant'
la source
rien ne s'imprime lorsque j'appuie sur Ctrl puis sur Accueil. Rien ne se passe. J'ai essayé de changer 0 en O également.
balki
@balki C'est Ctrl + V, pas Ctrl. Je viens de réaliser qu'il y avait un problème de formatage dans ma réponse.
Gilles 'SO- arrête d'être méchant'
Merci! :) Je suis maintenant habitué au mode ctrl + aet ctrl +eet vi
balki
5

J'ai trouvé que je devais frapper CTRL-v, relâcher, puis la touche Homeou Endpour obtenir les séquences ^[[Het ^[[Fpour Homeet Endrespectivement. L'ajout des lignes suivantes au .zshrcfichier a résolu le problème pour moi:

bindkey '^[[H' beginning-of-line
bindkey '^[[F' end-of-line
Johann
la source
2

Ajoutez ces lignes à /etc/zshrcpuis faites un source /etc/zshrc(tiré d' ici )

bindkey '\e[1~'   beginning-of-line  # Linux console
bindkey '\e[H'    beginning-of-line  # xterm
bindkey '\eOH'    beginning-of-line  # gnome-terminal
bindkey '\e[2~'   overwrite-mode     # Linux console, xterm, gnome-terminal
bindkey '\e[3~'   delete-char        # Linux console, xterm, gnome-terminal
bindkey '\e[4~'   end-of-line        # Linux console
bindkey '\e[F'    end-of-line        # xterm
bindkey '\eOF'    end-of-line        # gnome-terminal
Abhinandan NM
la source
2

Cette réponse a expliqué mon problème vraiment bien et l'a résolu.

/programming//a/686458/5472892

TL; DR: changez votre type de terminal PuTTY par défaut xtermen linux.

Peut-être que quelqu'un peut aussi l'utiliser.

Thorian93
la source