Les touches home et end peuvent-elles être mappées lors de l'utilisation de Terminal?


76

Les touches homeet endd’un MacBook Pro peuvent être émulées avec les touches fn + flèche gauche ou fn + flèche droite. Ou, lorsque certains paramètres sont modifiés, avec la touche de commande (Apple) au lieu de fn.

Aucun de ces travaux dans Terminal.

Comme j'ai souvent besoin d'aller au début ou à la fin de la ligne et que je voudrais aussi avancer ou reculer mot par mot.

Comment puis-je sauter sur une ligne dans un terminal?

Réponses:


64

Utilisez control+ apour HOME et control+ epour END dans Terminal.

Utilisez également esc+ fpour aller au début du mot suivant et esc+ bpour aller au début du mot actuel . (vous devez faire attention au courant et au suivant)


2
parfait! Qu'en est-il de sauter par mot? (ctrl-left et ctrl-right dans windows)
at01

@ at01 J'ai mis à jour ma réponse.
Am1rr3zA

41
Qui a conçu les clés pour Terminal?!?!
at01

4
Je préfère utiliser l'option + flèche gauche et l'option + flèche droite pour passer au début des mots
Allan Jikamu

2
Ctrl + a et Ctrl + e ont fonctionné pour moi, mais sans recourir à la reprogrammation des touches comme proposé ici, je préfère l'alternative de Shift + Home et Shift + End de @ AlphaFighter (Maj + Fn + flèche gauche et Maj + Fn). + flèche droite du clavier MacBook Pro) pour le début et la fin de la ligne.
John Rix

70

Pour répondre à la question sur la façon d’obtenir le début ou la fin de la ligne, il apparaît que, par défaut, Terminal mappe ces clés sur celle-ci:

  • shift + home → début de ligne, équivalent à la touche "home" dans les terminaux normaux
  • shift + end → end of line, équivalent à la touche "end" dans les terminaux normaux

Si vous voulez que le travail soit normal et que vous travailliez de manière "normale" (sans nécessiter de décalage), accédez à [Menu Terminal] → Préférences → onglet Profils (ou aux paramètres de certaines versions d'OS X) → Sous-onglet Clavier.

Puis modifiez / ajoutez ces clés comme suit: "envoyer la chaîne au shell"

  • domicile: \033[H
  • fin: \033[F

Vous pouvez obtenir la \033pièce en appuyant sur la touche Échap dans l'entrée de la boîte de dialogue d'édition, si vous devez l'ajouter.

Ensuite, la maison et la fin fonctionnent à nouveau normalement (ouf).

Notez également que "alt + ←" et "alt + →" par défaut dans le terminal correspondent aux mots gauche et droit, un autre combo très utile à retenir.

Dans les versions ultérieures de Mac OS X, si l'écran du terminal est déplacé vers le haut ou le bas lorsque vous appuyez sur la touche d'accueil / fin, il peut être nécessaire de définir \033[1~la clé d'origine et la touche de fin \033[4~pour obtenir les résultats souhaités (aucun décalage requis). .

N'hésitez pas à modifier cette réponse pour ajouter des liaisons de clés plus utiles, car il s'agit d'un wiki de communauté.


5
\ 033 [H et \ 033 [F pour la maison et la fin n'a pas fonctionné pour moi; cependant \ 001 et \ 005 l'ont fait. Vous pouvez entrer ces codes dans la boîte de dialogue d'édition en appuyant sur ctrl-A et ctrl-E. J'utilise zsh, je ne suis pas sûr que cela fasse une différence.
JW.

shift + home / end a fait le job
isaias-b

1
J'essayais de comprendre cela depuis un moment, cela m'a sauvé!
Paul Gray

Cela fonctionne très bien lorsque vous êtes localement dans l'application de terminal réelle. Cependant, lorsque vous êtes sur une machine macOS, cela ne semble plus fonctionner. Comment se déplacer?!
Ahi Tuna

2
@AhiTuna SSH est simplement une connexion à une session de terminal, pas une connexion à un émulateur de terminal. Les options d'entrée sont toujours définies par l'émulateur de terminal que vous utilisez.
Bachsau

39

On dirait que vous cherchez de l'aide pour utiliser readline et bash, voici une liste insensée d'éléments de clavier modifiés à partir de: http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Déplacer au début de la ligne.
Ctrle Aller au bout de la ligne.
Escf Avancer d'un mot.
Escb Reculer d'un mot.
Ctrll Efface l'écran en réimprimant la ligne actuelle en haut.

Ctrlk Élimine le texte de la position actuelle du curseur à la fin de la ligne.
Escd Tue depuis le curseur jusqu'à la fin du mot en cours ou, entre deux mots, jusqu'à la fin du mot suivant.
EscDel Supprimez du curseur le début du mot précédent, ou s'il se trouve entre des mots, jusqu'au début du mot précédent.
Ctrlw Tuer du curseur au blanc précédent. C'est différent EscDelCtrla parce que les limites de mots diffèrent.

Ctrld Supprimer le caractère sous le curseur.
Ctrl_ Annuler la dernière chose que vous avez faite. Vous pouvez annuler tout le chemin pour revenir à une ligne vide.

Et, voici comment ramener le texte dans la ligne. Yanking signifie copier le texte le plus récemment tué du tampon de suppression.

Ctrly Ramenez le texte le plus récemment tué dans la mémoire tampon au niveau du curseur.
Escy Faites pivoter la bague de mise à mort et tirez sur le nouveau sommet. Vous ne pouvez le faire que si la commande précédente est Ctrlyou Escy.


c'est inestimable - merci - j'aimerais que ce soit disponible quelque part sous forme de fichier imprimable!
matt b

Je me rends compte que ce n'est pas tout à fait "optimisé", mais Fichier -> Imprimer?
Jason Salaz

Wow, ceux-ci sont super maladroits par rapport à terme sur linux .. une façon de remapper cette absurdité?
btk

Oui, essayez la page de manuel Bash. (Je ne sais pas comment le faire moi-même.)
SilverWolf

6

Pour ceux qui préfèrent utiliser les touches fléchées, appuyer sur fnShift+ Left Arrowvous ramènera à la maison en ligne de commande. De même, fnShift+ vous Right Arrowmènera à la fin.


6

Vous pouvez déplacer un mot à la fois avec option+ leftet option+ right.

Concernant l’utilisation de homeet end, les liaisons par défaut du terminal sont les suivantes:

  • shift+ home→ saute au début de la ligne
  • shift+ end→ saute à la fin de la ligne
  • home → défiler vers le haut du tampon de défilement arrière
  • end → défiler jusqu'au bas du tampon de défilement arrière

Dans de nombreuses autres applications de terminal (sur plusieurs plates-formes), les paires modifiées et non modifiées sont inversées (c.-à-d. Nues homeet endsont utilisées pour sauter autour de la ligne actuelle et les versions modifiées (que ce soit par shiftou autre) sont utilisées pour naviguer dans la mémoire tampon de défilement. ) Vous pouvez inverser les liaisons du terminal pour fonctionner de cette façon si vous le souhaitez en procédant comme suit:

Allez dans le menu Terminal → Préférences → Paramètres / onglet Profil → sous-onglet Clavier.

Puis modifiez les paires clé-action pour qu'elles soient les suivantes:

  • ↖︎: Texte envoyé: \ 033 [H
  • ⇧↖︎: Faites défiler vers le haut
  • ↘︎: Envoyer le texte: \ 033 [F
  • ⇧↘︎: défiler vers le bas

Remarque: \ 033 est entré dans la zone de texte à envoyer de la boîte de dialogue Modifier en appuyant sur la touche d'échappement.

Alors que vous y êtes, vous voudrez peut-être échanger de la même façon les liaisons de modification et non modifiées page upet page down, par souci de cohérence, appuyer sur une touche de navigation avec shiftreprésente une commande pour le terminal lui-même (pour naviguer dans le tampon de défilement comme un document), tout en appuyant sur une touche de navigation envoie la pression de touche jusqu'à ce que s'exécute au sein de ce (par exemple bash, less, nano, screen, etc.). Les paires clé-action pour cela sont:

  • ⇞: Envoyer le texte: \ 033 [5 ~
  • ⇧⇞: faire défiler la page vers le haut
  • ⇟: Envoyer le texte: \ 033 [6 ~
  • ⇧⇟: faire défiler la page vers le bas


4

La cartographie homeet les endtouches avec les fonctionnalités souhaitées résoudront facilement le problème.

De nombreuses réponses ont été publiées, mais dans le cas où vous utilisez zsh, vous pouvez définir homeà:

\001

et mis endà:

\005

en cliquant sur préférence - profil - clavier.


J'ai aussi essayé cela, mais ça rompt Home et End dans vim :( Vous pouvez les mapper à ce qu'Alfredo Cardigliano a suggéré: Touche: ↖ Action: \ 033OH Touche: Action: \ 033OF
curlingdude

Cela a parfaitement fonctionné pour moi! Je n'utilise que Nano, donc pas de problèmes ici.
Sterling Bourne

Oui, cela fonctionne, mais ne résout pas le problème en général. Je suis passé de bash à zsh et j'étais habitué à FN-SHIFT-LEFT / RIGHT .. cela a résolu mon problème: stackoverflow.com/questions/8638012/…
vlk

1

C’est le moyen le plus efficace de le faire fonctionner également avec vim. Allez dans Terminal -> Préférences -> Profils -> Clavier et ajoutez:

Touche: ↖ Action: \ 033OH

Touche: ↗ Action: \ 033OF


1

J'aimerais proposer une solution alternative à ce problème. Cela fonctionne très bien si vous êtes un utilisateur vi. Les liaisons de touches Vim dans Terminal permettent d’utiliser votre terminal dans un style vim. Vous pouvez le faire en tapant un set -o viterminal et n'hésitez pas à le mettre .bash_profilesi vous le souhaitez. Après cela, votre terminal devient un éditeur vim. Vous pouvez utiliser esckey pour passer en mode commande et vous déplacer de manière vim. Par exemple, 0vous amène au début et $vous amène à la fin. Vous pouvez également utiliser Iet Apour aller au début et à la fin et passer tout de suite en mode édition. wet bvous permettent d'avancer et de reculer d'un mot. Et si vous essayez de passer en mode visuel en appuyant surv, vous recevrez un éditeur vim et le texte que vous avez lorsque vous quitterez cet éditeur sera exécuté dans le terminal.

Sachez que cette liaison de clé vim annule toutes les touches de raccourci que vous avez apprises à partir d'autres réponses.


0

voici la liste sous forme imprimable, comme vous le souhaitez :)

http://pastebin.com/uCqwn7qs

J'ai aussi corrigé un "bug" dans la description. Voici ce que vous pouviez lire dans les instructions:

ESC-d Supprime du curseur le début du mot précédent ou, entre deux mots, jusqu'au début du mot précédent.

Cela sent fort comme une erreur de couper-coller, puisque les deux phrases partielles disent la même chose. En clair, la première moitié doit en réalité lire "du curseur au début du mot actuel".


0

... Qu'en est-il de sauter par mot? (ctrl-left et ctrl-right dans windows)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.