数年前にMacBook Airを購入し怒濤の勢いでメイン機までMacBook Proにしてしまったおり、慣れたWindowsキーアサイン(ショートカットなど)をMac上でどう再現するかについてリサーチして記事を書きました。そして今回DELL XPS 15 2-in-1(以下XPS9575)を購入し開発作業にもゴリゴリ使っていこうということで、逆にmacOSの馴染んだキーアサインをWindows上で再現する必要性に駆られています。とりあえず現状のまとめ。
■達成目標
現在、macOS側にもWindowsの基本ショートカット(コピペやアンドゥ)を一部取り込んでたり、macOS上で仮想Windowsを使って開発作業をしていたりで、わりとカオス。コピーする時にCtrl+Cを使ったりCmd+Cを使ったり行き当たりばったり。さらにエディタではEmacs的なキーバインドも使うので、Ctrl+Aが「全選択」な時もあれば「カーソルを行頭に移動」だったり自分でもあんまり明確なルールがありません。結果として色々なところで意図しない結果となって「ちっ」とか思いつつ根本解決にじっくり取り組んではいない、という状態。
でもまぁとりあえずの目標として、
- コピペくらいではイラつかないようにしたい
- エディタ(主にSublime Text 3)ではある程度Emacsキーバインドを採り入れたい
- WinキーいらないのでmacOSのCmdキー互換で各種ショートカットを使えるようにしたい
- XPS9575とデスクトップWindows機(キーボードはLogicool CRAFT)でも違和感なく往来できるようにしたい
- これらのカスタマイズが今後の変更も含め自動で同期してほしい
Logicool ロジクール KX1000s bluetooth ワイヤレスキーボード CRAFT マルチデバイス Windows,Mac対応 Adobe CC対応, FLOW機能対応
■解決編
ざっくりいうと、WindowsでAutoHotKeyを使うことで大枠は解決できます。その上でSublime Text 3で細かい追加調整をしています。
AutoHotKeyを使う
2022.12.26追記: AutoHotKeyのスクリプト記法は2.0でリニューアルされました。以下のスクリプトは1.x時代のもので最新版では動かない可能性があります。
AutoHotKeyは常駐型のキーバインド変更ツールです。レジストリ書き換え型と比べると安定性やメモリ消費に不安もありますが定評もあるのであまり先入観に囚われず導入してみることにしました。ソフトウェアでマッピングするので単なるキースワップ以上に、バッチ的なことや文字列入力動作など自由度が格段に高いです。まだ試してないですがアプリケーション毎に設定を変えることもできそう。往年のKarabiner(Elementになる前)を彷彿とさせる万能ツールですね。日本語の詳しい情報はWikiにまとめられています。
設定ファイル(拡張子.ahk)の文法はやや馴染みづらいですが、例えば公式の入門ドキュメンドを引用すると、
1 2 3 |
#j:: Send, My Furst Script return |
で、「Ctrl + Jで”My First Script”」とタイプする、という意味になります。これをエディタに書いて.ahkという拡張子にして保存、ダブルクリックすれば有効になります。Winキーの場合は「^」のかわりに「#」を使います。また送出側にCtrl + Cみたいなキーコンビネーションを指定する場合はこんな感じ。Ctrlを押す->Cを押す->Ctrlを離す、というのを指示してるわけですね。
1 2 3 |
#c:: Send,{Ctrl down}c{Ctrl up} return |
これでWin+Cを押すとCtrl+C動作をさせることができます。当該のWinキーショートカットがある場合でも、ここで上書きすることで本来の動作を抑止することができるみたいです。たぶん「return」のおかげでOSにシグナルが届かずイベント処理が終了するということでしょう。
とりあえずこんな感じにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
#c:: Send, {Ctrl down}c{Ctrl up} return #v:: Send, {Ctrl down}v{Ctrl up} return #x:: Send, {Ctrl down}x{Ctrl up} return #z:: Send, {Ctrl down}z{Ctrl up} return #f:: Send, {Ctrl down}f{Ctrl up} return #w:: Send ^{f4} ;Close Window return #q:: Send !{f4} ;Quit Application return #a:: IfWinActive, ahk_exe sublime_text.exe { Send, {Alt down}a{Alt up} } else { Send, {Ctrl down}a{Ctrl up} } return |
ショートカットやアンドゥはCtrlでもCmdでも同じ動作で構わないので先の例のままです。Macでウインドウを閉じるCmd+WはWindowsではCtrl+WではなくCtrl+F4が一般的だと思うのでそちらにアサイン。Cmd+Qがアプリケーション終了でAlt+F4。Ctrl/Cmd+Aはエディタ(Sublime Text)ではCtrl+Aを「カーソルを行頭へ移動」(Emacsキーバインド)、Cmd+Aを全選択と振り分けたかったので、AutoHotKeyでは一旦Alt+Aに割り振り、Sublime側でAlt+Aを全選択にアサインしています。ただしこれだとSublime以外のアプリケーションで全選択できないので、ウインドウ名などで条件分岐するIfWinActiveを使います。ahk_exeはアプリの実行ファイルを使った指定という意味です。Sublime Textは「(ファイル名)- Sublime Text」のようなウインドウタイトルになるので、部分一致検索するよりは実行ファイル名の方がなんとなく確実かなと。elseブロックがあるのでSublime Text以外ではCtrl+Aになります。将来的にアプリ名を複数ORで指定したくなったらどうすんのとかはまだ調べてません。
AutoHotKeyを自動起動する、設定を同期する
AutoHotKey自体に「ログイン時に起動」のような設定はありません。.exeから起動した場合、同じディレクトリにあるAutoHotKey.ini(書式は.ahkと同じ)を読み込むようですす。
なので、設定は.ahkファイルに書いて、DropboxやOneDriveなどで同期。Windowsのスタートアップフォルダにその.ahkファイルへのショートカットを追加しておけばよさげ。