Remapper "Accueil" et "Fin" au début et à la fin de la ligne

326

La plupart de mon temps de calcul est passé sous Linux (parfois sous Windows). Sur ces plates-formes, les touches Homeet Endpermettent de sauter universellement au début ou à la fin de la ligne en cours.

Je m'habitue de plus en plus à utiliser l'ordinateur Apple dans ma vie, mais il est toujours frustrant que ces clés semblent liées au début et à la fin du document et qu'il ne semble pas y avoir de clé pour la ligne. actions basées.

Ma question:

  1. Existe-t-il des liaisons de clavier manquantes pour le début et la fin de la ligne? (J'utilise principalement un terminal, Chrome et LibreOffice)
  2. Existe-t-il un moyen de relier les fonctions de ces touches aux fonctions que je connais bien? Je suis prêt à abandonner les versions basées sur des documents qui me semblent peu utiles.

Aussi deux mises en garde:

  1. Je ne suis pas le seul utilisateur du système. Ce serait bien si mes paramètres utilisateur ne cassaient pas l'expérience des autres peuples. Si ce n'est pas possible, je pense que j'ai probablement la préférence la plus forte!
  2. J'utilise plusieurs langues et permute entre les dispositions de clavier. Par conséquent, toutes les solutions devraient fonctionner même lors du basculement entre plusieurs dispositions de clavier.
Caleb
la source
1
Notez que bien que je finisse par trouver une solution et répondre à ma propre question, je suis ouvert à des solutions plus faciles ou plus polyvalentes. Aussi, le processus de découverte de ceci n'est pas clair. Par exemple, où trouvez-vous les codes de clé et les noms d'action si je veux remapper plus de clés? N'hésitez pas à ajouter des réponses si vous avez des connaissances pertinentes!
Caleb

Réponses:

304

Les raccourcis par défaut permettant de passer au début ou à la fin des lignes (enveloppées) sont et . et ou Aet Edéplacer au début ou à la fin des lignes ou des paragraphes (déballé). et aller en arrière / en avant par mots, et tous ceux-ci sont compatibles avec la détention Shiftpour sélectionner pendant les mouvements correspondants.

Vous pouvez remapper la maison et terminer en créant ~/Library/KeyBindings/et en enregistrant une liste de propriétés comme ceci DefaultKeyBinding.dict:

{
    "\UF729"  = moveToBeginningOfLine:; // home
    "\UF72B"  = moveToEndOfLine:; // end
    "$\UF729" = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B" = moveToEndOfLineAndModifySelection:; // shift-end
}

La plupart des combinaisons de touches pour l'édition de texte dans OS X sont définies dans /System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dict.

L'application de modifications nécessite la réouverture d'applications. DefaultKeyBinding.dict est ignoré par certaines anciennes versions de Xcode (fonctionne avec la dernière version 6.3.1), Terminal et de nombreuses applications multiplates-formes.

Voir Cocoa Text System et mon site Web pour plus d'informations sur les associations de touches personnalisables.

Les raccourcis clavier du terminal peuvent être personnalisés dans Préférences> Paramètres> Clavier. \033OHse déplace au début d'une ligne et \033OFà la fin d'une ligne.

Dans Eclipse, les liaisons de clé doivent être modifiées dans Préférences> Général> Clés. Vous devez modifier les liaisons par défaut pour les commandes Line Start et Line End (remplacez ← par et → par). Pour que la sélection fonctionne, modifiez également les options Sélectionner début de ligne et Sélectionner fin de ligne .

PS: Vous devrez peut-être vous déconnecter et vous reconnecter pour que les ~/Library/KeyBindings/DefaultKeyBinding.dictmodifications prennent effet.

Lri
la source
1
Informations utiles sur les correspondances de touches - je les ai utilisées avec l'outil (commercial) BetterTouchTool, voir cette réponse .
RichVel
3
Cela ne fonctionne pas dans la plupart des applications de mon expérience. Il est préférable d'utiliser Karabina-Elements.
Timmmm
3
C’est formidable parce que cela fonctionne dans Terminal, iTerm2, Chrome, Sublime et Outlook. L’alternative (Karabina) est moins bonne car elle mappe "Home" sur Command + LeftArrow, ce qui change de fenêtre dans Terminal. N'oubliez pas de redémarrer toutes les applications après avoir enregistré le fichier .dict.
Will Sheppard
1
Cela ne marche pas avec vim
MohitC
2
Ce paramètre fonctionne pour moi sur Mac OS Mojave avec un clavier externe connecté.
Jdhao
106

Je suis actuellement sur Lion 10.7.4, et pour une raison étrange, cette édition ~/Library/KeyBindings/DefaultKeyBinding.dictn’a pas fonctionné pour moi.

J'ai constaté que l' addon Préférences Système de KeyRemap4MacBook (qui s'appelle maintenant Karabiner ) fonctionne très bien et que vous pouvez également mapper une variété de clés sur celui-ci sans avoir à éditer de fichier texte. Par exemple, changer les touches page haut / page bas pour que le curseur suive également la page haut / bas.

Il suffit de télécharger l'addon et, dans le panneau Préférences Système, naviguez jusqu'à la For PC Userssection et vérifiez Use PC Style Home /End.

Remarque, j'ai choisi (Change Home to Command+Left)au lieu de (Change Home to Control+A), comme si j'avais choisi la première, et si la ligne était encapsulée, la maison m'emmènerait au début de la ligne encapsulée, plusieurs lignes plus haut, au lieu de me ramener au début de la ligne actuelle.

KeyRemap4MacBook

jklp
la source
9
Karabiner est génial et également open source
Jedidja
2
Avec 10.10.5, les autres suggestions semblent ne pas fonctionner, mais Karabiner (le nouveau nom de KeyRemap4MacBook fonctionne sur tous les produits Mac) fonctionne bien et ne nécessite pas de redémarrage pour que les modifications prennent effet. Immensément utile pour ce Mac noob; J'espère que d'autres pourront également en bénéficier.
Ralph J
1
A ce jour, "Karabiner ne fonctionne pas sur macOS Sierra pour le moment".
james.garriss
2
@ james.garriss Donnez une chance à Karabiner-Elements - le même auteur a été réécrit pour soutenir Sierra (il est encore en développement, ce qui en fait quelques aspérités) - github.com/tekezo/Karabiner-Elements
jklp
5
@jklp Malheureusement, la fonctionnalité nécessaire pour remapper les touches Accueil et Fin sur le clavier étendu Apple n'est pas encore disponible dans Karabiner Elements. Personnellement, je semble avoir assez de mémoire pour Ctrl-a, Ctrl-e lorsque je travaille dans la console, mais lorsque je travaille dans une application à interface graphique telle que Sublime, il est très difficile de se rappeler. Pour Sublime (spécifiquement), il existe cependant une solution: coderwall.com/p/upolqw/…
Ville le
43

Grâce à cet article , j'ai découvert comment relier les touches Homeet Endaux actions basées sur les lignes, utilisateur par utilisateur, qui fonctionnent sur des dispositions de clavier.

Vous devez créer un fichier de dictionnaire avec les codes clés et les nouvelles commandes à mapper, mais assurez-vous d'abord que le dossier où il sera placé existe en ouvrant un terminal et en exécutant:

$ mkdir -p ~/Library/KeyBindings

Ensuite, créez ou modifiez le fichier à l'adresse ~/Library/KeyBindings/DefaultKeyBinding.dict. S'il n'existait pas auparavant, ajoutez la section entière ci-dessous. S'il existe, ajoutez simplement les quatre nouvelles lignes à l'intérieur du bloc.

{
    "\UF729"  = "moveToBeginningOfLine:";
    "\UF72B"  = "moveToEndOfLine:";
    "$\UF729" = "moveToBeginningOfLineAndModifySelection:";
    "$\UF72B" = "moveToEndOfLineAndModifySelection:";
}

Pour activer les paramètres, vous devrez vous déconnecter et vous reconnecter.

Notez que cela couvre à la fois l'action normale consistant à déplacer le curseur et la combinaison Shift+ Home/ Endpour sélectionner le mouvement du curseur lors de la plongée.

Caleb
la source
12

J'utilise OS X Sierra et la ~/Library/KeyBindings/DefaultKeyBinding.dictsolution suggérée par d'autres utilisateurs fonctionnait partiellement: certaines applications comme TextEdit ont maintenant le comportement souhaité, mais d'autres applications n'en ont pas. Google Chrome et Slack sont deux personnes qui ne semblent pas respecter le DefaultKeyBinding.dictfichier.

Pour réparer les applications restantes, j'ai utilisé BetterTouchTool pour créer une liaison entre les raccourcis clavier spécifiques aux applications Homeet Endles raccourcis natifs d'OS X Ctrl+Aet Ctrl+E. BetterTouchTool n'est pas gratuit, mais il y a une période d'essai de 45 jours.

Pour faire ça:

  1. Installer et lancer BetterTouchTool
  2. Allez à l'onglet Gestes> Clavier
  3. Sous "Sélectionner une application", cliquez sur +et choisissez l'application que vous souhaitez réparer.
  4. Cliquez sur "Ajouter un nouveau raccourci", affectez la Homeclé dans le champ "Enregistrer le raccourci" et définissez l'option "Déclencher un autre raccourci clavier" sur Ctrl + A. Répétez pour Endet Ctrl + E.
  5. Lorsque vous avez terminé, le panneau devrait ressembler à ceci:Panneau BetterTouchTool
  6. Sous Paramètres avancés de BetterTouchTool, autorisez son exécution au démarrage.

Remarque: ne quittez pas l'application BetterTouchTool, sinon les touches ne seront plus interceptées. Fermez juste sa fenêtre et il devrait continuer à fonctionner en arrière-plan.

Mamacdon
la source
Merci - je viens de l'utiliser sur El Capitan car j'ai déjà payé BetterTouchTool, et cela fonctionne bien avec Chrome, Slack et d'autres applications.
RichVel
9

J'utilise l'impressionnant KeyRemap4MacBook avec les paramètres personnalisés ci-dessous.

Il corrige Home / End dans la plupart des applications et ne bousille pas iTerm2.

De https://gist.github.com/lhotari/6134223181439b9ed0a1

<?xml version="1.0"?>
<!-- ~/Library/Application Support/KeyRemap4MacBook/private.xml -->
<!-- Custom keyboard mappings for MBP using https://pqrs.org/macosx/keyremap4macbook/ -->
<root>
    <item>
        <name>Lari's PC Style Home/End</name>
        <appendix>(Change Home to Command+Left)</appendix>
        <appendix>(Change End to Command+Right)</appendix>
        <appendix></appendix>
        <appendix>{{ PC_STYLE_BINDINGS_IGNORE_APPS_DESCRIPTION }}</appendix>
        <identifier>lari.remap.pclikehomeend</identifier>
        <block>
            <only>DREAMWEAVER</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME, ModifierFlag::SHIFT_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END,  ModifierFlag::SHIFT_L</autogen>
        </block>
        <block>
            <only>BLUEFISH,WORD,EXCEL,POWERPOINT</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::HOME</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::END</autogen>
        </block>
        <!--
        <block>
            <only>EMACS, TERMINAL, X11, ECLIPSE</only>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, KeyCode::A, ModifierFlag::CONTROL_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  KeyCode::E, ModifierFlag::CONTROL_L</autogen>
        </block>
         -->
        <block>
            <not>{{ PC_STYLE_BINDINGS_IGNORE_APPS }}</not>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME, MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_UP,    ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_COMMAND, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,  MODIFIERFLAG_EITHER_LEFT_OR_RIGHT_CONTROL, KeyCode::CURSOR_DOWN,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_HOME,             KeyCode::CURSOR_LEFT,  ModifierFlag::COMMAND_L</autogen>
            <autogen>__KeyToKey__ FROMKEYCODE_END,              KeyCode::CURSOR_RIGHT, ModifierFlag::COMMAND_L</autogen>
        </block>
    </item>
</root>
Lari Hotari
la source
N'a pas été mis à jour pour fonctionner avec Sierra, selon le lien ci-dessus.
james.garriss
Cet outil a été renommé Karabiner et fonctionne apparemment avec OS X El Capitan 10.11, Sierra 10.12 et High Sierra 10.13.
RichVel
7

J'ai trouvé ce qui suit utile pour iterm2et zshavec des citations d' ici :

Ouvert iTerm > Preference. Allez à profiles tab > Keys. Cliquez ensuite sur le +bouton en bas de la liste des touches, appuyez sur Home(ou Fn+left arrowsur le clavier sans fil apple), sous Actionsélectionner Send Escape Sequence, puis tapez[1~

Répétez l'opération pour la Endtouche avec [~4pour la séquence de touches d'échappement.

Si vous utilisez zsh, faites aussi ceci:

1) Placez ce qui suit dans votre ~/.zshrcdossier

bindkey "^[[1~" beginning-of-line
bindkey "^[[4~" end-of-line

2) Exécuter source ~/.zshrcdans tous les terminaux ouverts.

RationalDev
la source
iTerm2 possède également un préréglage de mappage de touches "Édition de texte naturel" qui inclut ce comportement.
Matt M.
Doit être changé pour bindkey "^[[~4" end-of-line. Notez la position du 4.
Ty.
@Ty Merci, mais pouvez-vous expliquer pourquoi? La source originale, ainsi que github.com/reenhanced/zsh-config/blob/master/lib/… et github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/… utilisent "^ [[4 ~ "
RationalDev
Je ne suis pas très au courant de ces séquences d'échappement, mais pour moi, les ^[[4~échos sortent 4en ^[[~4plaçant le curseur à la fin de la ligne.
Ty.
@Ty Intéressant. J'ai fait quelques recherches pour comprendre pourquoi, mais je n'ai pu que trouver des exemples de ^[[4~. Quel type de clavier et de codage de caractères utilisez-vous, peut-être que cela fait une différence?
RationalDev
5

J'ai accompli cela en utilisant des éléments de mousqueton .

Vous devez mettre à jour la section rules de ~/.config/karabiner/karabiner.jsonavec le tableau JSON à partir du code ci-dessous. Cela remappe les touches home et end pour qu’elles fonctionnent de la même manière que sur PC / Windows.

{
  "rules": [
    {
      "description": "change home key to command + left_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "home"
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change home key to command + left_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "home",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "left_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow",
      "manipulators": [
        {
          "from": {
            "key_code": "end"
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    },
    {
      "description": "change end key to command + right_arrow while presing shift (selection)",
      "manipulators": [
        {
          "from": {
            "key_code": "end",
            "modifiers": {
              "mandatory": [
                "left_shift"
              ]
            }
          },
          "to": [
            {
              "key_code": "right_arrow",
              "modifiers": [
                "left_command",
                "left_shift"
              ]
            }
          ],
          "type": "basic"
        }
      ]
    }
  ]
}

voir aussi: github gist

entrez la description de l'image ici

Jason Waters
la source
1

La réponse de @ Lri est géniale ( merci beaucoup; cela me rendait fou ), mais j'ai fini par la modifier un peu.

(Dans cette réponse, j'utilise les noms non appley pour les clés, donc command = super et option = alt.)

Super-gauche et super-droit étaient mappés sur moveToLeftEndOfLineet moveToRightEndOfLine. L'utilisation de moveToBeginningOfLineet moveToEndOfLine, comme le fait @Lri, peut entraîner un comportement incohérent.

Il existe de nombreuses autres différences entre les raccourcis Appley et les raccourcis de tous les autres que j'ai ajoutés. Par exemple, ctrl-gauche et ctrl-droite sont supposés se déplacer entre les mots; pas alt-left et alt-right. Je ne pense pas que cela soit exhaustif, mais cela fonctionne plutôt bien pour moi en ce moment. J'ai supposé que l'utilisateur avait déjà échangé les touches de commande et les super touches pour corriger les opérations de coupe, de copie et de collage.

~/Library/KeyBindings/DefaultKeyBinding.dict:
{
    "\UF729"   = moveToLeftEndOfLine:; // home
    "\UF72B"   = moveToRightEndOfLine:; // end
    "$\UF729"  = moveToBeginningOfLineAndModifySelection:; // shift-home
    "$\UF72B"  = moveToEndOfLineAndModifySelection:; // shift-end

    "@\UF700"  = moveUp:;  //super-up
    "@\UF701"  = moveDown:;  //super-down
    "@\UF702"  = moveWordLeft:;  //super-left
    "@\UF703"  = moveWordRight:;  //super-right

    "@$\UF700" = moveUpAndModifySelection:;  // super-shift-up
    "@$\UF701" = moveDownAndModifySelection:;  // super-shift-down
    "@$\UF702" = moveWordLeftAndModifySelection:;  // super-shift-left
    "@$\UF703" = moveWordRightAndModifySelection:;  // super-shift-right

    "@\UF728"  = deleteWordForward:;  // super-delete
    "@\U7F"    = deleteWordBackward:;  // super-backspace
}
Eric Toombs
la source
-3

Vous pouvez également remapper les touches du clavier, ainsi que personnaliser votre souris et votre pavé tactile de différentes manières, avec le logiciel gratuit BetterTouchTool, disponible à l'adresse http://blog.boastr.net/ . Une excellente solution pour personnaliser le fonctionnement de vos périphériques d’entrée!

Gary Coker
la source
2
Pourriez-vous développer votre réponse en expliquant comment utiliser le logiciel spécifié pour résoudre le problème initial?
grg
Pas libre, ni dans le sens de "Bière Libre" ou "Liberté". Version d'essai de 45 jours, logiciel payant en source fermée.
Wyatt8740