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