はじめに
Notion Tips の第150回目は、Notion アプリで ctrl-m, ctrl-i, ctrl-[ を利用する方法を解説します。
デフォルトで使えるキーバインド
macOS 版の Notion アプリでは、Emacs キーバインドのいくつかが使えるようになっています。
- ctrl-p: (↑)
- ctrl-n: (↓)
- ctrl-b: (←)
- ctrl-f: (→)
- ctrl-a: (行頭)
- ctrl-e: (行末)
- ctrl-h: (カーソルの左を削除)
- ctrl-d: (カーソルの右を削除)
- ctrl-k: (行末まで削除)
- ctrl-v: (1ページ下)
Windows 版でどこまで使えるのかは、自宅に環境がないので試していません。私自身は vim ユーザなのですが、以前は emacs も利用していましたし、macOS のターミナルでもこれらは使えるので、手が馴染んでいます。
ただ、Notion を使っていて以下の 3 つのキーが対応しておらず、悔しい思いをしておりました。
- ctrl-m: (return)
- ctrl-i: (tab)
- ctrl-[: (escape)
これらをタイプしてから反応しないのを確認してから、return, tab, escape などに手を伸ばすのが面倒に感じていました。
Karabiner elements で対応
現在、研究室では 7sPro Max のプロトタイプを使っておりますが、それまでは 2 台の HHKB を左手用と右手用に別々に利用していました。この時、右側のキーボードで Shift key を押し、左側のキーボードで a をタイプしても、デフォルトの状態では大文字になりません。ここで、Karabiner elements というソフトウェアを利用すると、複数のキーボードをこのソフトウェアが管理してくれるようになり、別々のキーボードのモディファイアキーが有効になります。
さらに Karabiner elements では、Complex Modifications という設定で、とあるキーボード操作から複数のストロークを実行することも可能になります。私の Complex Modifications は以下のようになっています。
下三つは Karabiner elements のサイトから取得したものです。
- 「Ctrl-[ を押した時に、英数キーも送信する」「esc キーを押した時に、英数キーも送信する」
- vim のコマンドは半角入力が必要なので、入力モードを終了しコマンドモードに移行する ctrl-[ や esc が押された時には、かな入力をキャンセルするようにしています。
- 「Map Left Option plus h/j/k/l to Arrows」
- Emacs キーバインドも使えますが、やはり hjkl の方が慣れているので、Option + h/j/k/l でカーソルキーに対応するようにしています。
return, tab, escape の対応
上の画面で「Edit」をクリックすると、以下のように JSON で設定を変更することができます。
JSON ファイルは以下のようになっています。
{ "description": "Map ctrl-m,i,[ to return, tab, and escape", "manipulators": [ { "conditions": [ { "bundle_identifiers": [ "^notion\\.id$" ], "type": "frontmost_application_if" } ], "from": { "key_code": "m", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } }, "to": [ { "key_code": "return_or_enter", "modifiers": [] } ], "type": "basic" }, { "conditions": [ { "bundle_identifiers": [ "^notion\\.id$" ], "type": "frontmost_application_if" } ], "from": { "key_code": "i", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } }, "to": [ { "key_code": "tab", "modifiers": [] } ], "type": "basic" }, { "conditions": [ { "bundle_identifiers": [ "^notion\\.id$" ], "type": "frontmost_application_if" } ], "from": { "key_code": "open_bracket", "modifiers": { "mandatory": ["left_control"], "optional": ["any"] } }, "to": [ { "key_code": "escape", "modifiers": [] } ], "type": "basic" } ] }
中身は見ればだいたいわかると思いますが、今回のキーバインドでは conditions にて、最も前に出ているアプリが Notion アプリ (^notion\\.id$
)であることを確認しています。それ以外のアプリの時にこれらが発動しないようにするためです。最近データベースが重くなってきていて、アプリ版をメインで使い出したのですが、さらにこの設定でキーボード入力に対する不満がなくなり、ますますブラウザ版を使わなくなりました。
なお、Notion アプリ自体ではあまり esc を使う頻度は多くないのですが、このキーバインドで esc が押されたことになると、自動的に上で解説した「英数キー」も押されたことになり、必ず英数モードになります。最近は、英数を入力するために ctrl-[ をタイプすることが多いので、これも対応できたので、非常に助かっています。
おわりに
ネタ的には Notion というより、macOS のネタでした。ただ、Notion 使いの vim ユーザの方で同じ悩みを抱えている人もいるかもしれないと思い、記事にしてみました。あとは、Notion が用意している ctrl-h と delete キーの挙動が少し違うので、これもマッピングした方がいいのではと感じています。