alfort's Blog

Linuxエンジニアのメモ

Windowsでホームポジションから手を動かさずにEmacs風に操作する

Windows自体の操作もLinux風にしたい…

少し前にこんな記事を書いた。

alfort728.hatenablog.com

この設定でだいぶ日本語入力、英数入力の不快感とか、最低限のターミナル操作を行う上での不快感は軽減されたものの、今度は別のキーに対しての不快感が目立つようになってきた。

それは Deleteキー、BackSpaceキー、ファンクションキー、矢印キー、Homeキー、Endキーである。

これらのキーはめちゃくちゃ使うキーなのに、なぜかホームポジションから外れたところに配置してある。

Linuxとかの端末を操作していると、これらのキーはCtrlキーとの組み合わせで実現できるので大したことはないのだけれども、Windowsではそうはいかない。

そこで、WindowsAutoHotkeyというプログラムを使ってうまく設定してみたのでその時のお話。

www.autohotkey.com

前提

まず、キーボードは一般的な日本語キーボードを使う。

レジストリの書き換えで以下のような機能を実現している。

  • 半角全角キーとEscキーの入れ替え
  • 左CtrlキーとCaps Lockキーの入れ替え

上記の設定だと、日本語入力と英数入力の切り替えが大変になるので、IMEの設定で日本語入力への切り替えを変換キー、英数入力への切り替えを無変換キーに割り当てている。

キーバインディングの設計

何はともあれまずどういうキーバインドを設定するのかを考える。

各キーをどう割り当てるか

自分が普段Emacsっぽいキーバインドを使っているので、Ctrlとは別のプレフィックスキーを設定して、そのキーとの組み合わせでDeleteキー、BackSpaceキー、矢印キー、Homeキー、Endキーを実現することにした。

また、ファンクションキーについては、プレフィックスキーと数字キーのある段の組み合わせで実現すると良さそうだ。

具体的には以下のような感じ。

<Prefix> + D : Delete
<Prefix> + H : BackSpace
<Prefix> + P : Up
<Prefix> + N : Down
<Prefix> + F : Right
<Prefix> + B : Left
<Prefix> + A : Home
<Prefix> + E : End
<Prefix> + 1 : F1
<Prefix> + 2 : F2
<Prefix> + 3 : F3
        ︙
<Prefix> + 0 : F10
<Prefix> + - : F11
<Prefix> + ^ : F12

プレフィックスキーを何にするか

プレフィックスキーにCtrlを割り当てると、Windowsキーバインドを潰してしまい困ることもあるので別のプレフィックスキーを用意する。

プレフィックスキーに何を設定するか考えてみたけど、割といいポジションにいる無変換キーあたりが良さそうである。

Ctrlキーは小指で押さないといけないけれども、無変換キーならば親指で押せてとても便利だからである。

無変換キーに割り当てていた英数入力はかなキーに割り当てる。

結局標準のキーバインドからどうなったのか

前回の記事と合わせて、どういうキーバインドにしたのかまとめる。

# レジストリを書き換えて設定
Esc : 半角全角
半角全角 : Esc
左Ctrl : CapsLock
CapsLock : 左Ctrl

# IMEで設定
変換 : 日本語入力
かな : 半角英数入力

# AutoHotkeyで設定
無変換 + D : Delete
無変換 + H : BackSpace
無変換 + P : Up
無変換 + N : Down
無変換 + F : Right
無変換 + B : Left
無変換 + A : Home
無変換 + E : End
無変換 + 1 : F1
無変換 + 2 : F2
無変換 + 3 : F3
        ︙
無変換 + 0 : F10
無変換 + - : F11
無変換 + ^ : F12

キーバインドの設定

レジストリを書き換えて設定する項目

前回書いた記事を参照。

alfort728.hatenablog.com

IMEの設定

この辺を参考に、IMEの設定を書き換える。

freelifetech.com

AutoHotkeyの設定

ひとまずAutoHotkeyをインストールして、以下のような内容のファイルを作成する。

拡張子は.ahkで保存しておく。

vk1D & P::Send,{Blind}{Up}
vk1D & B::Send,{Blind}{Left}
vk1D & N::Send,{Blind}{Down}
vk1D & F::Send,{Blind}{Right}
vk1D & A::Send,{Blind}{Home}
vk1D & E::Send,{Blind}{End}
vk1D & M::Send,{Blind}{Enter}
vk1D & H::Send,{Blind}{BS}
vk1D & D::Send,{Blind}{Delete}


vk1D & 1::Send,{Blind}{F1}
vk1D & 2::Send,{Blind}{F2}
vk1D & 3::Send,{Blind}{F3}
vk1D & 4::Send,{Blind}{F4}
vk1D & 5::Send,{Blind}{F5}
vk1D & 6::Send,{Blind}{F6}
vk1D & 7::Send,{Blind}{F7}
vk1D & 8::Send,{Blind}{F8}
vk1D & 9::Send,{Blind}{F9}
vk1D & 0::Send,{Blind}{F10}
vk1D & -::Send,{Blind}{F11}
vk1D & ^::Send,{Blind}{F12}

return

後は保存したファイルをダブルクリックで開くと、AutoHotkeyが起動してキーバインドが有効になる。

.exeの形式にするには、右クリックでCompile Scriptを選択する。 .exeの形式にしてスタートアップのフォルダに入れておくと、起動時には勝手にキーバインドが有効になりレジストリを変えたのとほとんど変わりなく使えるようになる。

雑記

他の方のブログとかでAutoHotkeyの設定ファイルの書き方を調べていたのだけれども、なんか違った。

自分の環境(というか最近のAutoHotkey?Windows10?)では無変換キーは「vk1D」に割り当てられているっぽくて、他のブログとかで紹介されているように「vk1Dsc07B」に設定してもAutoHotkeyが受け付けてくれなかった。

ちなみにかなきーも同様で、「vkF2sc070」を使っているブログがたくさんあるけど、「vkF2」で設定しないといけなかった。