Chikuwaのつぶやき

クラシック音楽、言語、ドイツ、物理など、雑食性です

MacOS Montereyでのカーソル操作のキーボードショートカットをWindowsに寄せる方法

(この記事ではhome, end, 矢印キーのあるキーボード、つまりフルサイズかTenKeyLess (TKL)を想定しています)

問題点

Windowsでカーソルを素早く移動する方法として

  • (A win) home, end 行の先頭/末尾へ移動
  • (B win) Ctrl →, Ctrl ← 単語単位で移動

がある。これだけならMacOSでも

  • (A mac) Cmd →, Cmd ←
  • (B mac) Opt →, Opt ←

で再現できる。上記のキーコンビにShiftを加えることで、今のカーソル位置から行の先頭/末尾(A)や次/前の単語(B)までを選択できる。

  • (A' win) Shift home, Shift end 行の先頭/末尾までを選択
  • (B' win) Shift Ctrl →, Shift Ctrl ← 次/前の単語までを選択

MacOSの場合、

  • (A' mac) Shift Cmd →, Shift Cmd ←
  • (B' mac) Shift Opt →, Shift Opt ←

となる。

しかしWindowsMac両方で作業をする僕にとってこれは3つのデメリットがある。
1. 自分が今どちらのOSを操作しているかによって、頭の中を切り替えないといけない。
2. Macで誤ってhome, endを押すと、文書の頭や末尾まで飛ばされてしまう
3. Macでは(A)にはEmacs key bindingを使った方がよほど速い*1のだが、(A'), (B), (B')に対応していない

  • (A mac) Ctrl a, Ctrl e
  • (B mac) 無し
  • (A' mac) 無し
  • (B' mac) 無し

総じて、Macのカーソル移動に関するショートカットはお世辞にも使いやすいと言えない。

解決策

なのでMacEmacs 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

このファイルに以下を書き込む*2*3

{
	/* 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