MacOS Montereyでのカーソル操作のキーボードショートカットをWindowsに寄せる方法
(この記事ではhome, end, 矢印キーのあるキーボード、つまりフルサイズかTenKeyLess (TKL)を想定しています)
問題点
Windowsでカーソルを素早く移動する方法として
- (A win) home, end 行の先頭/末尾へ移動
- (B win) Ctrl →, Ctrl ← 単語単位で移動
がある。これだけならMacOSでも
で再現できる。上記のキーコンビにShiftを加えることで、今のカーソル位置から行の先頭/末尾(A)や次/前の単語(B)までを選択できる。
- (A' win) Shift home, Shift end 行の先頭/末尾までを選択
- (B' win) Shift Ctrl →, Shift Ctrl ← 次/前の単語までを選択
MacOSの場合、
となる。
しかしWindowsとMac両方で作業をする僕にとってこれは3つのデメリットがある。
1. 自分が今どちらのOSを操作しているかによって、頭の中を切り替えないといけない。
2. Macで誤ってhome, endを押すと、文書の頭や末尾まで飛ばされてしまう
3. Macでは(A)にはEmacs key bindingを使った方がよほど速い*1のだが、(A'), (B), (B')に対応していない
総じて、Macのカーソル移動に関するショートカットはお世辞にも使いやすいと言えない。
解決策
なのでMacでEmacs key bindingをキープしながら、足りないショートカットはWindowsに寄せることに。つまり
- (A mac) Ctrl a, Ctrl e 行の先頭/末尾へ移動
- (A mac) home, end 行の先頭/末尾へ移動
- (B mac) Ctrl →, Ctrl ← 単語単位で移動
- (A' mac) Shift home, Shift end 行の先頭/末尾までを選択
- (B' mac) Shift Ctrl →, Shift Ctrl ← 次/前の単語までを選択
としたい。「それではページの先頭/末尾へ移動するショートカットが無くなってしまうではないか!」という心配はご無用。page upやpage downを押し続けるか、Cmd ↑, Cmd ↓でできます。
方法
ユーザ単位でのkey bindingの変更は、$HOME/Library/KeyBindings/DefaultKeyBinding.dictに書き込む。ファイル名や拡張子を間違うと認識されないようなので注意。
mkdir -p $HOME/Library/KeyBindings
touch DefaultKeyBinding.dict
{ /* Ctrl right/left */ "^\UF703" = "moveWordRight:"; "^\UF702" = "moveWordLeft:"; /* Shift Ctrl right/left */ "$^\UF703" = "moveWordRightAndModifySelection:"; "$^\UF702" = "moveWordLeftAndModifySelection:"; /* home/end */ "\UF729" = "moveToBeginningOfLine:"; "\UF72B" = "moveToEndOfLine:"; /* Shift home/end */ "$\UF729" = "moveToBeginningOfLineAndModifySelection:"; "$\UF72B" = "moveToEndOfLineAndModifySelection:"; }
ファイル保存後、ログアウトしログインし直すと、カスタマイズした設定が適用される。
注意
1. Ctrl →, Ctrl ←はデフォルトで既存のショートカット「左(右)の操作スペースに移動」に割り当てられているので、これをoffにした*4。操作スペース間の移動は普段、Trackpadの4本指フリップでしているので、問題なし!(WindowsではCtrl Win →, Ctrl Win ←)
*1:現在ISO規格のUS Internationalレイアウトのキーボードを利用しており、Emacs key bindingのため、Caps LockキーはCtrlとして認識するように設定している。システム環境設定>キーボード>キーボードタブ>修飾キーから変更できる。
*2:$はShift、ˆはCtrlを指している。詳細は Text System Defaults and Key Bindingsを参照。
*3:Ctrl home/end およびShift Ctrl home/endはおまけ。「Ctrlは間を飛ばして端まで」「Shiftは今いる位置から移動先までを選択」という原則に沿って設定している。
*4:システム環境設定>キーボード>ショートカット>Mission Control