DefaultKeyBinding.dictを使って、macOSのキーバインドを変更

  • 4
    Like
  • 0
    Comment

久しぶりにキーバインドをいろいろと見直したので、ついでに作成したメモです。

DefaultKeyBinding.dictを編集して、macOS全体で使えるキーバインドを変更してしまいます。主に、カーソルキー周りのキーバインドを変更しています。

情報を確認した環境

環境 情報
OS macOS Sierra(10.12.2)
Date 2016/12/20

何をやっているのか?

簡単に言うと『~/Library/KeyBindings/DefaultKeyBinding.dict』を編集することで、キーバインドを変更しています。詳しい話はこちらのサイトを参考に。

テキスト編集のキー操作を自在にコントロールする - ザリガニが見ていた...。
http://d.hatena.ne.jp/zariganitosh/20101026/text_key_binding

変更内容

control + up / down

元々はスクロールだったのを、実際にカーソルも移動するように変更。

  • 元々の設定
    "^\Uf700" = "scrollPageUp:";
    "^\Uf701" = "scrollPageDown:";
    "$\Uf700" = "moveUpAndModifySelection:";
    "$\Uf701" = "moveDownAndModifySelection:";
  • 変更後
    "^\Uf700" = "pageUp:";
    "^\Uf701" = "pageDown:";
    "$^\Uf700" = "pageUpAndModifySelection:";
    "$^\Uf701" = "pageDownAndModifySelection:";

command + up / down

ドキュメントの先頭/最後への移動はあまり使わないので、1行単位のスクロールに変更。

  • 元々の設定
    "@\Uf700" = "moveToBeginningOfDocument:";
    "@\Uf701" = "moveToEndOfDocument:";
    "@$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
    "@$\Uf701" = "moveToEndOfDocumentAndModifySelection:";
  • 変更後
    "@\Uf700" = "scrollLineUp:";
    "@\Uf701" = "scrollLineDown:";
    "@$\Uf700" = "scrollLineUp:";
    "@$\Uf701" = "scrollLineDown:";

option + up / down

行頭/行末をたどる上下移動は使わないので、これをドキュメントの先頭/最後への移動に割り当て。

  • 元々の設定
    "~\Uf700" = (
        "moveBackward:",
        "moveToBeginningOfParagraph:",
    );
    "~\Uf701" = (
        "moveForward:",
        "moveToEndOfParagraph:",
    );
    "~$\Uf700" = "moveParagraphBackwardAndModifySelection:";
    "~$\Uf701" = "moveParagraphForwardAndModifySelection:";
  • 変更後
    "~\Uf700" = "moveToBeginningOfDocument:";
    "~\Uf701" = "moveToEndOfDocument:";
    "~$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
    "~$\Uf701" = "moveToEndOfDocumentAndModifySelection:";

control + left / right

行頭/行末への移動はcommandのコンビネーションで出来るので、controlは単語単位の移動に割り当て。ある意味、この変更がしたくてキーバインドをいじったようなもの。

  • 元々の設定
    "^\Uf702" = "moveToLeftEndOfLine:";
    "^\Uf703" = "moveToRightEndOfLine:";
    "^$\Uf702" = "moveToLeftEndOfLineAndModifySelection:";
    "^$\Uf703" = "moveToRightEndOfLineAndModifySelection:";
  • 変更後
    "^\Uf702" = "moveWordLeft:";
    "^\Uf703" = "moveWordRight:";
    "^$\Uf702" = "moveWordLeftAndModifySelection:";
    "^$\Uf703" = "moveWordRightAndModifySelection:";

その他

あると便利な単語選択を、余ってるキーに割り当て。

  • 追加
    "^r" = "selectWord:";

DefaultKeyBinding.dict

最終的に、DefaultKeyBinding.dictはこんな感じになりました。

{
    // /////////////////////////////////////////////////////////////
    // MARK: - up / down

    // ctrl + up/downでページ単位の移動
    "^\Uf700" = "pageUp:";
    "^\Uf701" = "pageDown:";
    "$^\Uf700" = "pageUpAndModifySelection:";
    "$^\Uf701" = "pageDownAndModifySelection:";

    // cmd + up/downで行単位のスクロール
    "@\Uf700" = "scrollLineUp:";
    "@\Uf701" = "scrollLineDown:";
    "@$\Uf700" = "scrollLineUp:";
    "@$\Uf701" = "scrollLineDown:";

    // opt + up/downで全体の先頭・最後へ移動
    "~\Uf700" = "moveToBeginningOfDocument:";
    "~\Uf701" = "moveToEndOfDocument:";
    "~$\Uf700" = "moveToBeginningOfDocumentAndModifySelection:";
    "~$\Uf701" = "moveToEndOfDocumentAndModifySelection:";

    // /////////////////////////////////////////////////////////////
    // MARK: - left / right

     // ctrl + left/rightで単語単位の移動
    "^\Uf702" = "moveWordLeft:";
    "^\Uf703" = "moveWordRight:";
    "^$\Uf702" = "moveWordLeftAndModifySelection:";
    "^$\Uf703" = "moveWordRightAndModifySelection:";

    // /////////////////////////////////////////////////////////////
    // MARK: - その他

    // ctrl + rで単語選択
    "^r" = "selectWord:";
}

感想(?)

  • 『command + .』がcancelOperationに割り当てられてるのを発見
  • クリップボード関係の割り当ては、アプリによってはうまく動作しないのであきらめた
  • 仕方が無いので、行単位の編集を標準にしたかったのも断念
  • 行単位のスクロールもアプリによってはうまく動かないけど、これは使えるときだけ使う