レバテックフリーランスのサイトに当サイトが紹介されました!

AutoHotKeyと無変換キーを使って便利なキーバインドを作ろう:Vimっぽい移動の実現

今回は、AutoHotKeyの実用例として「無変換キーを活用したキーバインド」を紹介していきます。

とても良い立地なのにあまりに使われていない無変換キーを活用して、今回はVimっぽい操作を実現します。Vimに興味がない人でも、無変換キーを活用したキーバインド作成自体が、開発環境効率化に役立つと思います。

AutoHotKeyとはなんぞやという人やのAutoHotKeyの導入についてはこちらの記事を参照ください。キー操作環境を改善しよう:AutoHotKeyとChangeKeyの活用

無変換キーの活用

AutoHotKeyにかぎらず、キーバインド変更・ホットキー設定ソフトは便利なのですが、あまりに特殊なカスタマイズや、既存のキーマップに影響を与えるような設定はなるべく避けたいものです。理想は、既存のキーバインドに影響を与えず、便利なキーバインドを実現すること。そこで活用するのが「無変換キー」です。

無変換キーには、

  • 押しやすいキー位置
  • 既存キーバインドに一切組み込まれていない

という大きな特徴があります。

押しやすいキー配置であることは、こちらの記事「Windowsで英数/かな入力切替は無変換/変換キーでしよう」でも触れました。超一等地ともいえる、押しやすいキー配置にいるキーなので、余らせているのはもったいない、ガンガン活用するべきなのです。これこそがJISキーボードの最大の利点といっても過言ではありません。

また、既存キーバインドには全く組み込まれていないので、新たなモディファイアキー(ShiftやCtrlのような他のキーと組み合わせて使うキー)として活用しやすいです。いくら使い倒しても既存のキーバインドにバッティングすることがありません。

これらの特徴を活かして無変換キーを使ったキーバインドを設定していきます。

Vimノーマルモードの移動を実現するキーバインド

無変換キーは有用ですが、それを使って何を実現して便利にしていくか。僕の場合は、自分が好きなエディタVimに基づいたちょっと便利にするキーバインドを設定していきます。

Vimではモードという概念があり、ノーマルモードという、テキスト入力ではなくカーソル移動に特化したキーバインドが使えるモードがあります。その移動操作キーバインドをVimのモードという概念とは無関係に使えるような設定を目指します。これにより、「Vim以外でもちょっとVimっぽい移動操作」や、「Vimのインサートモードという移動操作ができないモードでもちょっと快適な移動操作」が実現できます。

その実際のキーバインド設定(AutoHotKeyスクリプト)が以下です。AutoHotKeyは海外製のアプリなので、JISキーボードにある無変換キーは、わかりにくいですがキーコード「vk1Dsc07B」で扱う必要があります。

;;無変換キー自体を有効化
vk1Dsc07B::
Send, {vk1Dsc07B}
return

;; 無変換+hjklでカーソル移動、Blindをつけると修飾キー組み合わせ(Shift、Ctrなど)も可能
vk1Dsc07B & h::Send, {Blind}{left}
vk1Dsc07B & j::Send, {Blind}{down}
vk1Dsc07B & k::Send, {Blind}{up}
vk1Dsc07B & l::Send, {Blind}{right}

;;無変換+w,b,でword移動
vk1Dsc07B & w::Send, {Blind}^{right}
;; bで戻るは<ctrl-b>と合わせて下に記述

;; 無変換+0,$でhome,end
vk1Dsc07B & 0::Send, {Blind}{Home}
vk1Dsc07B & 4::
  If GetKeyState("shift", "P"){
    Send, {Blind}{End}
  }
  return

;; 無変換+a,eでhome,end
vk1Dsc07B & a::Send, {Blind}{Home}
vk1Dsc07B & e::Send, {Blind}{End}

;; 無変換 + ctrl + b,fでPgUp, PgDn
vk1Dsc07B & f::
if GetKeyState("ctrl", "P")
  SendPlay, {PgDn}
return

vk1Dsc07B & b::
if GetKeyState("ctrl", "P")
  SendPlay, {PgUp}
else
  Send, {Blind}^{left}
return

これで実現されているのが無変換キーをモディファイアキーとして(無変換キーが押下されている場合に)、以下が実現されています。

キー操作
h,j,k,l←,↓,↑,→
w,b単語移動進む、戻る
Ctrl-f, Ctrl-bPageUp,PageDown
0,aHome
$,eEnd

Vimの移動操作を知ってればほとんどおなじみのものです。ただし、Home,Endにのみ、aとeを追加しています。これは、HomeとEndは結構使いたい場面が多いのですが、無変換まで絡めるとどうしても押しにくいキーであるため追加で設定しています。そこだけEmacsっぽいキーバインドですね。

スクリプトは、AutoHotKey特有のモディファイアキーの表現(Ctrlは^など)等がありますが、あまり難しい記述ではないと思います。ちょっとしたルールと、一部APIのを把握するだけで、これくらいのことができます。実際にこのコードでスクリプトとして実行すれば、無変換キーを押しながら、ちょっと快適なキー移動ができるようになると思います。もう矢印キーに手をのばすこともほとんどなくなるでしょう。さらに詳しい文法は公式ページを参照ください。

まとめ

というわけで、AutoHotKeyを活用して、無変換キーによるVimっぽい移動操作実現例をご紹介してみました。僕はAutoHotKeyは他にも、ランチャー的なキーマップの使い方などもしています。本当に様々なことが実現できます。今回紹介した内容だけでも、自分好みの快適なキー操作が実現できそうでわくわくしないでしょうか?楽しそうだと思った方は、Vimっぽさに限らず、AutoHotKeyと無変換キーで遊んでみてはいかがでしょう。

コメント

タイトルとURLをコピーしました