Comment faire fonctionner ⌘ ← et ⌘ → pour le combo home / end pour Terminal?

21

Pourquoi fn- - (ou d'autres) fait un home / end dans Terminal mais un - fonctionne partout ailleurs?

Donc, pour être clair, la question est de savoir comment faire pour que Terminal prenne Command+ et pour la maison et la fin?

Jackie
la source

Réponses:

21

Aussi pratique que cela puisse être, Terminal ne peut pas facilement fournir les fonctionnalités que vous demandez.

La raison en est que les programmes qui s'exécutent dans Terminal ont des règles différentes pour déplacer le curseur au début / à la fin de la ligne, par exemple:

  • bash(et autres obus) utilisent CtrlAetCtrlE
  • viutilisations 0et $/Shift4

D'autres programmes peuvent utiliser d'autres touches. Il n'y a pas de combinaison de touches universelle pour positionner le curseur au début / à la fin de la ligne.

Bien sûr, Terminal pourrait maintenir une liste de combinaisons de touches pour un certain nombre de programmes courants, vérifier ce qui est en cours d'exécution et envoyer les bonnes touches pour vous, ou il pourrait fournir un élément de menu comme Déplacer le curseur au début de la ligne à l'intérieur du shell ⌘ ← puis envoyer CtrlADans les coulisses. Mais je suppose que les ingénieurs d'Apple ont pensé que si vous vous aventurez sur le territoire CLI , vous connaissez ses particularités.

En guise de remarque, Terminal fournit Optionet Optionqui se comporte bashcomme vous vous en doutez et déplace le curseur au début du mot précédent / suivant. En effet, ces combinaisons de touches sont mappées vers Escbet Escb(voir la man bashsection "Commandes de déplacement" pour plus d'informations). Dans vi, par exemple, seul ce dernier (genre de) fonctionne (à la fin de cette réponse, je montrerai comment configurer vipour fonctionner avec Optionet Option).

Mais grâce à Automator, AppleScript et les alias bash, vous pouvez obtenir et travailler avec bash(et éventuellement d'autres shells) et vi.

La première étape consiste à mapper et à CtrlAet CtrlE. Dans une deuxième étape, je vais vous montrer comment configurer vipour honorer CtrlAet CtrlE(qui, par conséquent, sera vicompatible avec et ).

Carte et vers CtrlAetCtrlE

  1. Dans Terminal, accédez à Préférences ...> Paramètres> [votre profil actif]> Clavier: entrez la description de l'image ici

  2. Appuyez sur +, sélectionnez "Cursor Left", "Control-Shift" comme modificateur et action "Send Text:". Appuyez ensuite sur CtrlA( \001apparaîtra dans le champ de texte) et confirmez avec OK: entrez la description de l'image ici

    (Dans une version précédente de cette réponse, j'ai utilisé "Shift" comme modificateur. J'ai remarqué que ce paramètre est en conflit avec shift, qui montre l'onglet Terminal précédent, si vous ne lâchez pas immédiatement. Utilisation de "Control-Shift" corrige cela.)

  3. Ajoutez maintenant une combinaison de touches pour "Curseur droit", mais appuyez sur CtrlE( \005apparaîtra dans le champ de texte). Confirmez avec OK.

  4. Ouvrez Automator (par exemple, appuyez sur spacepour faire apparaître Spotlight et tapez Automator ), sélectionnez Fichier> Nouveau et choisissez Service:

    entrez la description de l'image ici

  5. Faites glisser Run AppleScriptvers le volet droit: entrez la description de l'image ici

  6. Tapez le script suivant:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 123 using {shift down, control down}
            end tell
        end tell
    end run

    et enregistrez sous Move Cursor to Beginning of Line:

    entrez la description de l'image ici

  7. Répétez les étapes 4. à 6. avec ce script:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 124 using {shift down, control down}
            end tell
        end tell
    end run

    et enregistrez sous Move Cursor to End of Line:

    entrez la description de l'image ici

  8. Voici à quoi ressemble Terminal> Services:

    entrez la description de l'image ici

Configurez vipour honorer CtrlAetCtrlE

  1. Ouvrez .bashrcavec votre éditeur préféré et ajoutez cette ligne:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    Les deux premières mapcommandes indiquent vimd'interpréter ControlEet ControlAcomme $et 0, ce qui déplace le curseur au début ou à la fin de la ligne, respectivement.

    Les deux dernières mapcommandes indiquent vimde déplacer le curseur un mot à la fois comme vous vous y attendriez en appuyant sur optionet Option.

Avertissements

Vous remarquerez qu'il y a un court délai entre le moment où vous appuyez sur ou et le moment où le curseur se déplace réellement.

Gardez à l'esprit que cela ne fonctionnera que pour les programmes qui respectent CtrlA/ CtrlE, vous pouvez donc toujours vouloir apprendre les combinaisons de touches spécifiques de chaque programme que vous utilisez dans Terminal.

(Testé sur macOS Sierra 10.12.4)

jaume
la source
3
Merci pour la réponse détaillée, y a-t-il une pétition pour que Apple inclue juste un bouton home / end lors de la prochaine refonte :-)
Jackie
Je suis heureux d'avoir pu aider.
jaume
Wow .. tout cela pour obtenir un raccourci
flippant
C'est une bonne réponse, mais elle pourrait être améliorée en excluant toutes les informations superflues sur vilesquelles est une application complètement différente de celle du terminal.
axiopistie
1
C'est une super astuce. J'ai également réussi à faire fonctionner AppleScript en envoyant les codes clés pour "Accueil" et "Fin": "code clé 115" et "code clé 119" "
Keymon
2

Bien sûr, c'est possible.

Tout d'abord, vous pouvez utiliser l'outil gratuit "DoubleCommand" si vous avez un clavier Windows avec des touches HOME / END pour les faire se comporter comme elles le devraient (début / fin de ligne).

Deuxièmement, pour le terminal en particulier, allez dans les préférences, Clavier, modifiez l'icône / la touche qui ressemble à une flèche pointant vers le haut à gauche, sélectionnez "envoyer du texte" et tapez ctrl + a. Terminé!

Idem pour le bouton de fin ..

Si vous n'avez pas de clavier PC, vous pouvez faire de même avec d'autres combinaisons de touches.

George Katsanos
la source