WindowsでもMacのKarabiner-Elementsのようにキーバインドを変更したい
ということでAutoHotKeyの紹介なんですが、まずは前置き
まえおき
キーボード
20代の頃は仕事上キーボードは現場で用意されているものを何でも使わないといけなかったのですが、よく使っていたのはNEC EWS-4800、PC9801シリーズ、SunのType-5, Type-6などのキーボードでした。
日本語キーボードもあれば英語キーボードもありましたし、キーマップもわりとそれぞれ違ってたりしましたね。
なかでも、SunのType-5をこよなく愛するプロジェクトリーダーの下で仕事をしたときに英語配列を気に入り、以降は選べるときは英語配列を選ぶようになっていきました。
30代ではHHKBとThinkPad Keyboard、40代から現在にかけてはHHKB Professional2 Type-S(US)を個人でも会社でも両方使うようになっています。
EWS-4800用キーボード
Sun Type5 UNIX Keyboard, Type 6 Keyboard
HHKB Professional2 Type-S(US)
主な使い方
現在の主な使い方の組み合わせは以下のようになっています。
場所 | 所有 | PC | OS | Keyboard | 注意点 |
---|---|---|---|---|---|
自宅 | 個人 | Macbook Air 2018 | OS X BigSur | US版 | ノートPC |
自宅 | 会社 | Mac mini 2018 | OS X Catalina | HHKB Type-S(US) | メイン |
自宅 | 会社 | Mac mini 2018 | Windows10 | HHKB Type-S(US) | VirtualBox |
自宅 | 会社 | ThinkPad X1 Carbon Gen7 2019 | Windows10 | US版 | ノートPC |
会社 | 会社 | ThinkPad X1 Carbon Gen7 2019 | Windows10 | HHKB Type-S(US) | キーボードのみオフィスに置いてる |
一番使っている時間が長いのは、Mac miniにつないでいるHHKB Type-S(US)なのですが、ThinkPadにもつなぐ事があるのでWindowsでもそれなりに同じ操作ができないと仕事になりません。
そこでAutoHotKeyの出番というわけです。(やっとか)
※WindowsのCapsLockはCtrl2Capを使って入れ替え済みです。
AutoHotKeyで矢印キーを実現する
一番使用頻度が高いHHKB Type-S(US)には、矢印キーがありません。
デフォルトでは Fn + ;/['
なのですが、そんなの使いにくくてしょうがないので自分は Ctrl + hjkl
を割り当ててます。
いわゆるvi風ってやつですね。(ちなみにメインのエディタはVimです)
MacだとKarabiner-Elementsという素晴らしいソフトで実現しているのですが、Windowsでいい感じのソフトを探していたらAutoHotKeyというので出来ました。
Windows + HHKB Type-S(US)を使うときだけでなくThinkPad単体で使うときもうまく行ってます。
ちなみにMac mini上のVMでWindowsを使うときはMacのキーバインドがそのまま使えるので何もしていません。
レシピ
AutoHotKeyは設定を拡張子ahkのファイルにテキストで記述し、コンパイルしたものを起動時に実行させます。
矢印キーは押しっぱなしになるのでキーリピートの設定を入れてます。
; キーリピートの早いキーボードだと警告が出るので設定 #HotkeyInterval 100
矢印キーの制御を記述します。
; vi like key ^h::Send, {Left} ^j::Send, {Down} ^k::Send, {Up} ^l::Send, {Right}
以下のページからリファレンスを見ることが出来ます。
「ホットキー」と「キーリスト」を見ると定義がわかります。
修飾シンボルとして ^
がCtrlキーとなり、Leftはキーリストから探すと矢印キーの左になりますね。
つまり ^h::Send, {Left}
は Ctrl+h
が来たら 左矢印キー
になるということです。
j, k, lも同じように定義します。
Shiftを押しながら選択移動も定義します。
^+h::Send, +{Left} ^+j::Send, +{Down} ^+k::Send, +{Up} ^+l::Send, +{Right}
Shiftの修飾シンボルは +
です。
つまり ^+h::Send, +{Left}
は Ctrl+Shift+h
が来たら Shift+左矢印キー
になるということです。
その他
Emacs風のもの少し
Emacs風というよりはbashやzshの対話シェルのときによく使ってるからという感じでしょうか。
特に Ctrl + a
と Ctrl + e
は多用するので設定しています。
^a::Send, {Home} ^+a::Send, +{Home} ^e::Send, {End} ^+e::Send, +{End}
Slackの送信ボタン
Slackを日本語モードにすると Enter
が改行になるのはいいんですが、送信がMacだと Cmd + Enter
、Windowsだと Ctrl + Enter
でよく間違えます。
両方同時に使ってると頭のモード切替が間に合わなくてw
よく使うMacに合わせるためにWindowsでは Alt + Enter
で送信出来るように設定します。
この設定はSlackのときだけ使えるようしています。
; slack #IfWinActive, ahk_exe slack.exe !Enter:: Send, ^{Enter} return #IfWinActive
#IfWinActive
はWindowタイトルやプロセスを指定してその時だけ動作するように設定できます。
Windowタイトルやプロセスはahkスクリプトを実行したときにタスクトレイのアイコンを右クリックすると、出てくるWindow Spyというツールで調べることが出来ます。
※1行で書くときはreturnが省略できますが、複数行ではreturnを書かないと次に流れていってしまいます。(思わぬ挙動になったりします…)
今後
とりあえず今はこれだけですが、Karabiner-Elementsで出来ているCtrlキーを一回押すとEscになって、長押しはCtrlとして動く、というのも実現したいな。
Karabiner-ElementsはWebでほしい設定をポチポチ押すだけで設定できるので他にも色々設定しているけど、AutoHotKeyは記述しても思ったように動かないことが多くて、デバッグが結構必要になるし、ちょっとづつ増やしてる感じですね。