Kameno external storage

由無し事をたまに綴るブログです。

Mac用Cntl-Hの設定備忘録

Macを含めUnixではCntl-H (controlキーを押しながらHキーをタイプ) で一文字削除(backspace) できるのですが、特定のソフトウェアではヘルプ起動や履歴表示に割り当てられていて難儀します。これを解消して常にbackspaceにするにはKarabiner-Elementsというソフトウェアを使いますが、あまりに自由度が高いソフトウェアなので、設定を思い出せるよう備忘録を残します。

Controlキーのショートカットでホームポジション維持 

キーボードで文章やプログラムを打ち込む際に、なるべくホームポジションから指を動かさずに済ませたいものです。タイプミスした際に一文字削除するdeleteまたはbackspaceキーは右端上と遠く、右手をホームポジションから外す必要があります。同様に高頻度に打つreturnまたはenterキーも右端にあって遠いです。Unixではこの対策として、Ctrl-Hでbackspace, Ctrl-Mでreturnを入力でき、ホームポジションから手を動かさずに入力できます。同様にCtrl-Iでtab, Ctrl-Uで一行削除なども高頻度に使います。

MacのCaps LockをControlに

Happy Hacking KeyboardはCtrlキーがAの左隣にあって左手小指で簡単に押せるので、Ctrlキーを使ったショートカットが大変便利です。一方でMacのUSキーボードは、Aの左隣にcaps lockがあり、controlキーが最下段にあって打ちにくいので、caps lockをcontrolに置き換えるキーバインド設定が必要です。この設定はOSで標準サポートしており、「システム環境設定」→「キーボード」→「修飾キー…」でCaps Lockに^Controlを割り当てれば大丈夫です。これでTerminal.appやmiエディタなど大抵のソフトウェアでUnixのCtrl系ショートカットが使えます。

特定のソフトウェアがCtrl-Hを邪魔する

ところがいくつかのアプリケーションではCtrl-Hを独自の機能に割り当てるので困ります。

  • R : ヘルプが起動します。
  • Excel : ヘルプが起動します。
  • Firefox : 履歴タブが開きます。

タイプミスを修正しようとすると予期せぬ動作をするので大変イライラします。

Karabiner-Elementsによる解決

Karabiner-Elementspqrs.orgが開発したキーマップソフトウェアで、非常に高度なキー割り当てができます。複雑すぎて、Ctrl-Hをbackspaceに割り当てる単純な設定でも、マニュアルを読込む必要があります。キーマップの再設定が必要な機会は機種変更やOS更新くらいしかないので、前回の設定方法を忘れてしまいがちです。ここに書いておけば思い出せるでしょう。手順は以下のとおりです。

  1. Karabiner-Elementsをダウンロードしてインストール

    karabiner-elements.pqrs.org

  2. Karabiner-Elementsを起動
  3. caps_lockをleft_controlに割り当て
    PreferencesからSimple modificationsペインを選び、+Add itemをクリックして、From Keyにcaps_lockを、To keyにleft_controlを割り当てます。

    f:id:kamenoseiji:20210520111048p:plain

    Karabiner-ElementsのSimple modificationペイン


  4. ctrl-Hとctrl-Mの割り当てを記述したjsonファイルを用意 (例えば CtrlH.json というファイル名にします)
    CtrlH.jsonの内容を以下のように編集し、/Users/[ユーザ名]/.config/karabiner/assets/complex_modifications/ ディレクトリに置きます。

    {

      "title": "Unix-like Keymaps",

      "rules": [

        {

          "description": "Delete (Control + h)",

          "manipulators": [

            {

              "type": "basic",

              "from": {

                "key_code": "h",

                "modifiers": {

                  "mandatory": ["left_control"],

                  "optional": ["caps_lock"]

                }

              },

              "to": [

                {

                  "key_code": "delete_or_backspace"

                }

              ]

            }

          ]

        },

        {

          "description": "Return (Control + m)",

          "manipulators": [

            {

              "type": "basic",

              "from": {

                "key_code": "m",

                "modifiers": {

                  "mandatory": ["left_control"],

                  "optional": ["caps_lock"]

                }

              },

              "to": [

                {

                  "key_code": "return_or_enter"

                }

              ]

            }

          ]

        }

      ]

    }

  5. Karabiner-ElementsのRulesに読み込み
    PreferencesからComplex modificationsペインを選び、+Add itemをクリックします。Unix-like Keymaps (この名称はCtrlH.jsonのtitleに記したもの)の下に、Delete (Control + h) と Return (Control + m) というのがあるので(これらのルール名はCtrlH.jsonのdescriptionに記したもの)、これらをEnableにします。

    f:id:kamenoseiji:20210520111041p:plain

    Karabiner-ElementsのComplex modificationペイン


以上です。これでRでもExcelでもcontrol-Hで一文字削除できるようになりました。気持ちいいー!Karabiner-Elementsを提供して下さるpqrs.orgに感謝いたします。