HHKB Proで hjkl移動と英数/かな変換したい!
HHKB Proデフォルトだと使いにくい問題
Happy Hacking Keyboard Proには矢印キーがない。ではどのようにカーソル移動するかというと、Fnキーとのコンビネーションでおこなう。例えば↑はFn+[、↓はFn+/、といった具合だ。
このコンビネーションがなかなかに使いにくい。指がつりそうになる。左下のメタキー(WindowsキーやSuperキーのようなもの)にFnを割り当てることもできるが、それでもまだ使いにくい。
PFUがこんな使いにくいデフォルトコンビネーションにしなければ我々はこんな苦労をしなくても済んだのではないだろうか。これは我々をキーボード沼に引きずり落とすためのPFUの戦略なのだろうか。打ち心地は最高なのだが。
しばらく使って慣れるような配置やコンビネーションならいいのだが、矢印キーのコンビネーションは物理的に打ちにくいので慣れの問題で解決しそうにもない。
この矢印キーがない問題と、かな←→英数の変換キーコンビネーション(左Alt+右上の`)がめんどくさいのが、HHKB Proを買った多くの人が悩むポイントではないかと思う。そしてHHKB Proを買った人の多くはキーバインドを変更するのではないかと思う。WindowsならAutoHotKey、MacならKarabinerあたりを使ってキーバインドやコンビネーションを変更し、快適さへの飽くなき探求に邁進するのが正しいHHKB Proユーザーの姿だろう。
ご多分に漏れず僕もキーコンビネーションを変更することにした。Windowsユーザーなので使ったのはAutoHotKey。
英数/かな変換めんどくさい問題
まず、英数/かな変換めんどくさい問題について。これは、Macのようにスペースキーの左右にあるメタキーで切り替えできるようにしたい。左にあるメタキーで英数入力、右にあるメタキーでかな入力に切り替えたい。というかWindowsの変換/無変換がトグルなのがそもそもの問題のような気がする。
ググった結果、同じように思ってAHKのスクリプトを書いてる人がいたのでこれを拝借した。
矢印キーめんどくさい問題
矢印キーについては、vimのようにhjklで移動したい。これなら慣れてるしホームポジションも崩れない。これまたググった結果、同じように思ってる人がスクリプトを公開していた。
これでhjkl移動はできるようになったのだが、実際のVimのようにVim Modeに入らないとhjkl移動できない仕様になっているため、普通に文章を打つにはやや使いにくい。
そこで、Shift+Alt+hで←、Shift+Alt+jで↓のようなコンビネーションも併せて作成した。これにより、文章入力中にちょっとカーソル移動したい場合にはShift+Alt+j、Vim Modeで動き回りたいときはShift+Alt+vでVimModeに入ってからhjklなどで移動…と使い分けられる。
そうして出来上がったのが以下のスクリプトである。著作権は行使しないのでよければ使っていただきたい。
以下をVIM.ahkというファイル名で保存し、上記alt-ime-ahk.ahk内で#Include VIM.ahkとIncludeし、alt-ime-ahk.ahkを実行することで動作する。
;Vim風カーソル移動等キー
; Author: Particlight https://particlight.com/
^Space::Send,{Backspace} ;Ctrl+Space Backspace ;これは個人の好みで入れている
+!h::
Send,{LEFT}
return
+!j::
Send,{DOWN}
return
+!k::
Send,{UP}
return
+!l::
Send,{RIGHT}
return
+!f::
Send,{HOME}
return
+!g::
Send,{END}
return
+!b::
Send,{PgUp}
return
+!Space::
Send,{PgDn}
return
+!v::
; Shift Alt V でVim互換モード ON
if(vim_mode=True){
ToolTip
vim_mode:=False
return
}
ToolTip, Vim mode
vim_mode:=True
return
$j::
if(vim_mode=True){
Send,{DOWN}
return
}
Send,{j}
return
$k::
if(vim_mode=True){
Send,{UP}
return
}
Send,{k}
return
$h::
if(vim_mode=True){
Send,{LEFT}
return
}
Send,{h}
return
$l::
if(vim_mode=True){
Send,{RIGHT}
return
}
Send,{l}
return
$g::
if(vim_mode=True){
Send,{HOME}
return
}
Send,{g}
return
+$g::
if(vim_mode=True){
Send,{END}
return
}
Send,{G}
return
$b::
if(vim_mode=True){
Send,{PgUp}
return
}
Send,{b}
return
$Space::
if(vim_mode=True){
Send,{PgDn}
return
}
Send,{Space}
return