1. 導入
(Neo)vimって神ですよね。
キーボード操作が自由で、キーボードだけ様々な操作ができます。
でも、取得できないキーもあります。
しかもNeovimだと、プラグインを追加したくてもキーバインドの設定が他のプラグインと被ったりして嫌ですよね。
そこでAutoHotkeyが活躍します。
AutoHotkeyを使えばWindows側で設定して
-
CapsLock+OでBackspaceが出来るようにしたり -
CapsLock+E → TでTerminalを別のウィンドウで開いたり- (CapsLock+Eがプレフィックスキーになる)
- 12個の仮想的な新しいキーを作ったり
できるんです。
今回はそんなAutoHotkeyでCapsLockを使ったキーバインドの設定方法をご紹介します。
対象読者
- Neovimでプラグインを入れすぎてキーバインドの空きがない人
- 直感的なキーバインドを新しく作成したい人
2. AutoHotkeyの役割
AutoHotkeyは(仮想的に)新しいキーを作ることが出来ます。
例えば、F13やF14などですね。理論上はF24まで出来ます。
AutoHotkeyはこの役割を担います。
この記事では、F13などを作ったうえで、Neovimのinit.luaなどに新しいショートカットを書き込みます。
3. 準備
CapsLockをそのまま使うとLockキー特有の問題があります。そのため今回はCapsLockをF13という普通のキーへ変換してから利用します。
一般的なキーボードにはありませんが、Windows内部ではF24まで存在します。
具体的には、レジストリに「CapsLockキーを押した時にF13が送信されるようにする」ということを覚えさせます。
しかし「レジストリいじるの怖い」と思う人もいるかもしれないので、今回はレジストリを間接的に弄れるソフトを使います。
こちらのSharpKeysというソフトを使います。
英語のUIのソフトですが、簡単な英語なので調べるもしくは翻訳アプリを使うなどで簡単に解決できます。
これをインストールしたら、次の手順に従ってレジストリを更新してください。
「CapsLock+Oなどを直で作ると都合が悪い」の詳細
半角/全角、CapsLock、かな(カナロック) などのLock系のキーへのキー割り当ては上手く行かない。
これはOSのローカライズ段階で発生してる問題であり、フック系のキーカスタマイズユーティリティ全般で発生する。
AutoHotkeyがキーを認識する前の段階で、OS側がキーUp/Down情報を変更してしまっているためである。
(https://ahkwiki.net/Trouble#CapsLock.E3.82.84.E3.81.8B.E3.81.AA.E3.82.AD.E3.83.BC.E7.AD.89.E3.81.B8.E3.81.AE.E5.89.B2.E3.82.8A.E5.BD.93.E3.81.A6.E3.81.8C.E4.B8.8A.E6.89.8B.E3.81.8F.E3.81.84.E3.81.8B.E3.81.AA.E3.81.84)
このような問題があるため、今回はCapsLockのF13化を行いました。
3-1. 手順
- Addから、開いたウィンドウの左側のtype keyのところクリックしCapsLockキーを押す
- 右側のメニューからF13(
0064)を選ぶ - OKをクリック
- ここでWrite to Registryをクリックし、Closeをクリック
- 再起動
4. AutoHotkeyをインストール
こちらのサイトから、AutoHotkey v2.0をダウンロードし、指示に従ってインストールしてください。
インストールしたら、好きな場所に.ahkの拡張子のファイル(以下script.ahk)を作成してください。
そうしたら、C:\Users\usr\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startupにscript.ahkのショートカットを新たに作成してください。
これでAutoHotkeyの準備ができました!
5. CapsLockのキーバインドを追加
5-1. CapsLock+O → Backspaceを追加
script.ahkを好きなエディタで開いて、これをコピペしてください。
; CapsLock + Oでバックスペース
F13 & O::Send '{BackSpace}'
これで、CapsLock+OでBackSpaceが出るように出来ました。
これがAutoHotkeyの基礎的なスクリプトです。
このスクリプトの意味は、「F13キーとOキーの同時押しを受け取ったら、BackSpaceを送信しろ」という意味になります。
5-2. CapsLockのキーバインドをneovimに追加
(何故か私の環境では)実は、Neovim側ではCapsLock+E+Tのキーバインドを受け取れないんです。
このようなキーバインドを実現するためには、「CapsLock+EをF14にして、さらにF14+Tにする」のように迂回する必要があります。
これを実現するために、このスクリプトをscript.ahkにコピペしてください。
; CapsLock + EでF14
F13 & E::Send '{F14}'
Neovim側でF15を受け取るため、このLuaスクリプトをinit.luaもしくはそれに準ずるファイルにコピペしてください。
vim.keymap.set("n", "<F14>t", function ()
vim.cmd("botright terminal")
vim.cmd("resize 10")
end, {desc = "open terminal like VSCode"})
Luaが分かる方はfunctionの中身を変更してもらって構いません。
このスクリプトをコピペしたあと、保存しneovimを再起動すると、CapsLock+TでVSCode風にターミナルを開くことが出来るようになります。
このスクリプト・コードはこのような意味をがあります。
CapsLock + E
↓
AutoHotkey
↓
F14
↓
Neovim
<F14>t
6. 自分で設計する
3章~4章と同じようにすると、無変換キーを使ったキーバインドも作成できます。
6-1. 役割ごとに整理する
まず自分で設計するためには、
- ファイル操作
- Git操作
- 検索
- LSP
- AI
など、役割ごとに整理する必要があります。
6-2. 押しやすいキーを考える
次に、このような押しやすく直感的なキーを割り当てないといけません。
E = Explorer
T = Terminal
G = Git
R = Ripgrep / Telescope
優先順位は、「押しやすさ(ホームポジションとの近さ) >= 直感的さ」です。
6-3. AutoHotkeyとNeovimの役割分担
そもそも、AutoHotkeyとNeovimは役割が違います。
これを前提にして、キーバインドを作ると良いです。
| ツール名 | 役割 |
|---|---|
| AutoHotkey | キー入力を変換する |
| Neovim | 変換されたキーに機能を割り当てる |
6-4. さらに応用する
ここから応用してみましょう。
アイデアはこのようなものを参考にするとよいです。
- 変換キー・無変換キーを使う
- F15〜F24を使う
- アプリごとに異なるショートカットを設定する
- 長押し・単押しを使い分ける(KeyWait関数など)
6-5. あなた専用のキーマップを作ろう(演習)
楽しく効率的にNeovimを使うために、この課題を読者への演習とします。
良いNeovimライフを!
- 新しいショートカットを3つ追加する
- キー配置の理由を考える
- 「よく使う機能ほど押しやすい位置に置く」ことを意識して設計する