Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?

More than 1 year has passed since last update.

@See_Ku

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

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

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

情報を確認した環境

環境 情報
OS macOS Mojave(10.14.4)
Date 2019/04/24

何をやっているのか?

簡単に言うと『~/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:";

home / end

外付けのキーボードでHome/Endの動作が気になったので、行頭/行末への移動を割り当ててみました。問題があるようだったら、これはOFFで。

  • 変更後
    "\Uf729" = "moveToLeftEndOfLine:";
    "\Uf72b" = "moveToRightEndOfLine:";
    "$\Uf729" = "moveToLeftEndOfLineAndModifySelection:";
    "$\Uf72b" = "moveToRightEndOfLineAndModifySelection:";

その他

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

  • 追加
    "^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: - home / end

    // home / endで行頭・行末へ移動
    "\Uf729" = "moveToLeftEndOfLine:";
    "\Uf72b" = "moveToRightEndOfLine:";

    // shift + home / endで行頭・行末まで選択
    "$\Uf729" = "moveToLeftEndOfLineAndModifySelection:";
    "$\Uf72b" = "moveToRightEndOfLineAndModifySelection:";

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

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

感想(?)

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

  • Karabiner-Elementsさんは便利だけど、まだまだ、ちょっとしたキー割り当てでも面倒すぎる

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
5
Help us understand the problem. What is going on with this article?