「ホーム」と「終了」を行の先頭と末尾に再マッピングします


326

私のコンピューティング時間のほとんどはLinuxで費やされます(Windowsでの時間もあります)。これらのプラットフォームでは、HomeEndキーは現在の行の先頭または末尾に普遍的にジャンプします。

私は自分の人生で1台のAppleコンピューターを使用することに徐々に慣れてきましたが、これらのキーがドキュメントの最初と最後にバインドされているように見え、その行にはキーがまったくないようですベースのアクション。

私の質問:

  1. 行頭と行末で不足している既存のキーバインドはありますか?(主にターミナル、Chrome、LibreOfficeを使用しています)
  2. これらのキーの機能を使い慣れた機能に再バインドする方法はありますか?私はほとんど役に立たないと思われるドキュメントベースのバージョンをあきらめます。

また、2つの注意事項があります。

  1. システム上のユーザーは私だけではありません。私のユーザー設定が他の人の経験を損なうことがなければいいでしょう。これが不可能な場合、おそらく最も強い好みがあると思います!
  2. 私は複数の言語を使用し、キーボードレイアウトを切り替えるため、複数のキーボードレイアウトを切り替える場合でも、すべてのソリューションが機能することが期待されます。

1
解決策を見つけて自分の質問に答えることになりましたが、より簡単な、またはより汎用性の高い解決策を受け入れることに注意してください。また、これを発見するプロセスは明確ではありません。たとえば、さらにキーをリマップしたい場合、キーコードとアクション名はどこにありますか?関連する知識がある場合は、お気軽に回答を追加してください!
カレブ

回答:


304

先頭または末尾のに移動するためのデフォルトのショートカット(ラップ)線である及び又はA、およびE開封された行(または段落)の先頭または末尾に移動します。そして言葉によって前方/後方に移動し、これらの全ては、保持と互換性のあるShift対応する移動時に選択します。

次の~/Library/KeyBindings/ようにプロパティリストを作成して保存することで、ホームを再マップして終了できますDefaultKeyBinding.dict

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

OS Xでテキストを編集するためのキーバインドのほとんどは、で定義されてい/System/Library/Frameworks/AppKit.framework/Resources/StandardKeyBinding.dictます。

変更を適用するには、アプリケーションを再度開く必要があります。DefaultKeyBinding.dictは、一部の古いバージョンのXcode(最新バージョン6.3.1で動作)、ターミナル、および多くのクロスプラットフォームアプリケーションで無視されます。

カスタマイズ可能なキーバインドの詳細についてはCocoa Text System私のWebサイトを参照してください。

ターミナルのキーバインドは、[設定]> [設定]> [キーボード]でカスタマイズできます。\033OH行の先頭と行\033OFの末尾に移動します。

Eclipseでは、[設定]> [全般]> [キー]でキーバインドを変更する必要があります。Line StartおよびLine Endコマンドのデフォルトのバインドを変更する必要があります(⌘←をbyで、⌘→をbyで置き換えます)。選択が機能するには、Select Line StartSelect Line Endも変更します。

PS:変更を有効にするには、ログアウトして再度ログインする必要がある場合があります~/Library/KeyBindings/DefaultKeyBinding.dict


1
キーマッピングに関する有用な情報-(商用)BetterTouchToolでこれらを使用しました。この回答を参照してください。
RichVel

3
私の経験では、これはほとんどのアプリケーションでは機能しません。Karabina-Elementsを使用することをお勧めします。
-Timmmm

3
これは、Terminal、iTerm2、Chrome、Sublime、およびOutlookで動作するため、素晴らしいです。代替(Karabina)はあまり良くありません。なぜなら、それは "Home"をCommand + LeftArrowにマッピングし、実際にターミナルでウィンドウを切り替えるからです。.dictファイルを保存した後、すべてのアプリを再起動することを忘れないでください。
ウィルシェパード

1
これはvimでは動作し
ません

2
この設定は、外部キーボードが接続されているMac OS Mojaveで動作します。
jdhao

106

現在Lion 10.7.4を使用していますが、何らかの奇妙な理由で編集が~/Library/KeyBindings/DefaultKeyBinding.dictうまくいきませんでした。

KeyRemap4MacBook System Preferencesアドオン(現在はKarabinerと呼ばれています)が非常にうまく機能することがわかりました。また、テキストファイルを編集せずに、さまざまなキーを再マッピングすることもできます。たとえば、ページアップ/ページダウンキーを変更して、カーソルがページアップ/ダウンにも追従するようにします。

アドオンをダウンロードして、[システム環境設定]パネルでFor PC Usersセクションを参照し、をチェックするだけUse PC Style Home /Endです。

注:の(Change Home to Command+Left)代わりに(Change Home to Control+A)、最初の1つを選択したように選択しました。行が折り返されている場合、homeは現在の行の先頭に移動する代わりに、折り返し行の先頭に移動します。

KeyRemap4MacBook


9
Karabinerは素晴らしく、オープンソース
-Jedidja

2
10.10.5では、他の提案は機能しないように見えますが、Karabiner(KeyRemap4MacBookの新しい名前-すべてのMac製品で機能します)はうまく機能し、変更を有効にするために再起動する必要はありません。このMac noobには非常に役立ちます。うまくいけば、他の人も恩恵を受けることができます。
ラルフJ

1
現在、「カラビナは現時点ではmacOS Sierraでは動作しません。」
-james.garriss

2
@ james.garriss Karabiner-Elementsを試してみてください-同じ著者がSierraをサポートするために一から書き直しました(まだ開発中なので、かなりの荒削りです)-github.com/tekezo/Karabiner-Elements
jklp

5
@jklp残念ながら、Apple拡張キーボードのHomeキーとEndキーの再マッピングに必要な機能はKarabiner Elementsでまだ利用できません。個人的には、コンソールで作業しているときにCtrl-a、Ctrl-eの筋肉の記憶があるように見えますが、SublimeのようなGUIアプリで作業するとき、覚えるのは非常に困難です。ただし、Sublime(具体的に)には解決策があります:coderwall.com/p/upolqw/…–
Ville

43

この記事のおかげで、キーボードレイアウト間で機能するユーザーごとに行ベースのアクションにキーHomeEndキーを再バインドする方法を見つけました。

キーコードとマップする新しいコマンドを含む辞書ファイルを作成する必要がありますが、最初にターミナルを開いて実行することにより、これが配置されるフォルダーが存在することを確認してください:

$ mkdir -p ~/Library/KeyBindings

次に、でファイルを作成または編集します~/Library/KeyBindings/DefaultKeyBinding.dict。以前に存在していなかった場合、以下のセクション全体を追加します。存在する場合は、ブロック内に4つの新しい行を追加するだけです。

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

設定を有効にするには、ユーザーをログアウトして再度ログインする必要があります。

これは、カーソルを移動する通常のアクションと、カーソル移動中に選択するShift+ Home/のEnd組み合わせの両方に対応していることに注意してください。


12

私はOS X Sierraを使用してい~/Library/KeyBindings/DefaultKeyBinding.dictますが、他のユーザーから提案されたソリューションは部分的に機能しました。Google ChromeとSlackは、DefaultKeyBinding.dictファイルを尊重していないようです。

残りのアプリを修正するために、BetterTouchToolを使用して、アプリ固有のキーボードショートカットバインディングを作成HomeEnd、OS XのネイティブショートカットCtrl+AおよびにバインドしましたCtrl+E。BetterTouchToolは無料ではありませんが、45日間の試用期間があります。

これをする:

  1. BetterTouchToolをインストールして起動します
  2. [ジェスチャー]> [キーボード]タブに移動します
  3. [アプリケーションの選択]で+、修正するアプリをクリックして選択します。
  4. [新しいショートカットの追加]をクリックし、[ Homeレコードのショートカット]フィールドにキーを割り当て、[ トリガーのその他のキーボードショートカット]をCtrl + Aに設定します。EndとCtrl + Eを繰り返します。
  5. 完了すると、パネルは次のようになります。BetterTouchToolパネル
  6. BetterTouchToolの[詳細設定]で、起動時に実行できるようにします。

注:BetterTouchToolアプリを終了しないでください。キーを押すとインターセプトが停止します。ウィンドウを閉じるだけで、バックグラウンドで動作し続けるはずです。


ありがとう-BetterTouchToolに既に支払いを済ませているので、これをEl Capitanで使用しただけで、Chrome、Slack、その他のアプリで正常に動作します。
RichVel

9

以下のカスタム設定で素晴らしいKeyRemap4MacBookを使用しています。

ほとんどのアプリケーションでホーム/エンドを修正し、iTerm2を台無しにしません。

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>

上記のリンクによると、Sierraで動作するように更新されていません。
-james.garriss

このツールはKarabinerに名前が変更され、OS X El Capitan 10.11、Sierra 10.12、High Sierra 10.13で動作するようです。
リッチベル

7

ここに引用符iterm2zsh付けて、次のものが役立つことがわかりました:

オープンiTerm > Preference。に進みprofiles tab > Keysます。次に+、キーリストの下部にあるボタンをクリックし、 Home(またはFn+left arrowアップルのコードレスキーボードで)Action[選択]の下で、入力しますSend Escape Sequence[1~

エスケープキーシーケンスに対してEndキーで繰り返し[~4ます。

zshを使用している場合は、これも実行します。

1)~/.zshrcファイルに以下を配置します

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

2)source ~/.zshrc開いているターミナルで実行します。


iTerm2には、この動作を含む「Natural text Editing」キーマッピングプリセットもあります。
マットM.

に変更する必要がありますbindkey "^[[~4" end-of-line。4の位置に注意してください
Tyのを。

@Tyありがとう、しかしその理由を説明できますか?元のソース、ならびにgithub.com/reenhanced/zsh-config/blob/master/lib/...github.com/ThiefMaster/zsh-config/blob/master/zshrc.d/...の使用「^ [[4 〜」
RationalDev

私はこれらのエスケープシーケンスに精通していませんが、私にとってはカーソルを行末に移動^[[4~4ながらエコーアウトし^[[~4ます。
タイ。

@Ty興味深い。理由を調べるために検索を行いましたが、の例を見つけることしかできませんでした^[[4~。どんな種類のキーボードと文字エンコーディングを使用していますか?
RationalDev


5

Karabiner Elementsを使用してこれを達成しました。

~/.config/karabiner/karabiner.json以下のコードのJSON配列を使用して、ルールセクションを更新する必要があります。そうすることで、ホームキーと終了キーが再割り当てされ、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"
        }
      ]
    }
  ]
}

参照:github gist

ここに画像の説明を入力してください


1

@Lriの答えは素晴らしい(ありがとうございました;これは私を狂気に駆り立てていました)が、私はそれを少し修正することになりました。

(この回答では、キーにアップル以外の名前を使用しているため、command = superおよびoption = altです。)

スーパーレフトとスーパーライトは、実際にとにマッピングされmoveToLeftEndOfLineていましたmoveToRightEndOfLinemoveToBeginningOfLineand を使用するとmoveToEndOfLine、@ Lriと同様に、一貫性のない動作が発生する場合があります。

Appleyショートカットと、私が追加した文字通り他のすべてのショートカットとの間には、他にも多くの違いがあります。たとえば、ctrl-leftとctrl-rightは単語間を移動することになっています。alt-leftおよびalt-rightではありません。私はこれが網羅的であるとは思わないが、今のところ私にとってはかなりうまく機能している。ユーザーが既にコントロールとスーパーキーを交換して、切り取り、コピー、貼り付けを修正していると想定しました。

~/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
}

-3

http://blog.boastr.net/から入手できる無料のBetterTouchToolを使用して、キーボードキーを再マッピングしたり、あらゆる種類のクールな方法でマウスやトラックパッドをカスタマイズしたりすることもできます。入力デバイスの動作をカスタマイズするための優れたソリューション!


2
元の問題を解決するために指定されたソフトウェアを使用する方法に関する指示で答えを広げていただけますか?
GRGの

「フリービール」または「フリーダム」のどちらの意味でもフリーではありません。45日間の試用版、クローズドソース、有料ソフトウェア。
Wyatt8740
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.