Mozkeyを使ってみる (Windows x WezTerm x Neovim)
Mozkey が X 上で話題になっていたため、入れてみた。
Mozkey がどのようなものなのかについては、GitHub の README を見てもらったり、X のツイートを見てもらうのがいいと思うのでここでは説明は特にしないです。
WezTerm 上で変換キーで IME ON にするのがサクッとできなかったためその辺も合わせてメモとして残しておく。

GIF の typo 多いのは気にしないで…
環境や設定
- Windows11
- WezTerm
- WSL2
- Neovim
やりたいこと
- IMEの設定
- 変換キーで IME ON
- 無変換キーで IME OFF
- WezTerm 上の Neovim での設定
- Insertモードを抜けたら、IME OFF にしたい
使ったもの
- AutoHotkey
- WezTerm 上で変換キーを押したときに IME ON にならなかったため、AutoHotkey をかまして IME OFF できるようにした
設定
Mozkey の設定
まずは、設定画面を開く。どこから開くのか一瞬わからなかったから、念のためメモしておくと、 タスクバーの A のところを右クリックして、プロパティを開くと設定画面が表示できる。
いろんな設定があるのかもだけど、今時点で設定したものを書いておく
- 一般
- スペースの入力:半角
- キーの設定
- 入力文字なし
Henkan: IME有効化Muhenkan: IME無効化
- 変換前入力中
Space: 確定Tab: 変換Henkan: IME有効化Muhenkan: IME無効化
- 変換中
Space: 確定Tab: 次の候補を選択Muhenkan: 確定 → 空白を入力 → IMEを無効化
- 入力文字なし
- 入力補助
- カーソル周辺に入力モードを表示する:OFF
- ライブ変換
- ライブ変換の遅延: 120ms
- ライブ変換開始の最小文字数: 2文字
- ライブ変換中にルビ表示を出す: ON
- Zenzライブ補完
- Zenz補完開始の遅延: 即時
- Zenz補完開始の最小文字数: 2文字
WezTerm で変換キーを押したときにIME ON にする設定
自分の環境だけかもしれないが、WezTerm 上で変換キーを押しても IME ON にならなかったため、AutoHotkey を使って動作するように設定をした。
1. AutoHotkey をインストール
https://www.autohotkey.com/ にアクセスして v2 をインストールする
2. AHK用のフォルダを作成する
Windows側のホームディレクトリ配下に作成した (C:\Users\tamago324\ahk)
3. WezTerm 上で変換キーを押したら、IME ON にするスクリプトを書く
C:\Users\tamago324\ahk\wezterm-ime.ahk を作成
IME ON/OFF の両方を書いておいた。
#Requires AutoHotkey v2.0
#SingleInstance Force
#HotIf WinActive("ahk_class org.wezfurlong.wezterm")
; 無変換 → Mozkey の IME OFF
*vk1D::
{
Send("{vk1A}") ; VK_IME_OFF
}
; 変換 → Mozkey の IME ON
*vk1C::
{
Send("{vk16}") ; VK_IME_ON
}
#HotIf
F12::ExitApp()このスクリプトをダブルクリックして、起動して、WezTerm 上で IME の ON/OFF ができることを確認する。
4. wezterm-ime.ahk を常時起動させるように設定
Windows のスタートアッププログラムに設定することで、PC起動時に ahk を自動で起動させる。
Windows で「ファイル名を指定して実行」を起動し、
shell:startupを起動する
以下のショートカットを作成し、スタートアップのフォルダに配置する
C:\Users\tamago324\ahk\wezterm-ime.ahkこれで、PC起動時に ahk が起動できる。
Neovim の設定
WSL2上で起動している Neovim でインサートモードを抜けた時に IME OFF になるように設定する。
ここでも ahk を使って IME OFF にする。
1. IME OFF にするスクリプトを作成
C:\Users\tamago324\ahk\ime-off.ahk を作成する
#Requires AutoHotkey v2.0
#SingleInstance Off
Send("{vk1A}") ; IME OFF
ExitApp2. vimrc にインサートモードを抜けたときの autocmd を追加する
vimrc に以下を追加
AutoHotkey64.exe の配置場所はインストールによって変わるため、調整が必要かも?
" INSERT モードを抜けたら、IME OFF
autocmd InsertLeave * call <SID>ime_off()
function! s:ime_off()
let l:shell = &shell
let &shell='/usr/bin/bash --login'
call system(
\ '"/mnt/c/Users/tamago324/AppData/Local/Programs/AutoHotkey/v2/AutoHotkey64.exe" ' .
\ '"C:\Users\tamago324\ahk\ime-off.ahk"'
\ )
let &shell = l:shell
endfunctionおわりに
Mozkey でのライブ変換楽しい!!
Link
トラブルシューティング
WezTerm で変換キーを押しても IME ON にできない
Mozkey 側の設定は問題なかったし、WezTerm ではなく Windows Terminal では問題なく、変換キーで IME ON にできていたからおそらく WezTerm 側の問題だと思う。
AutoHotkey を使って、特定のウィンドウが有効なときだけ発火させる設定ができるみたいだから、それを使って対応してみることにした。
WezTerm のウィンドウが有効かどうかを判断するときに、ahk_class というものを使うみたいだった。その ahk_class は AutoHotkey の Window Spy という機能を使うことで簡単に検出することができた。
- AutoHotkey Dash を起動して、Window Spy を起動する。
- WezTerm をアクティブにする。
以下のような表示が出るため、それをもとに AutoHotkey のスクリプトを書いた。
wslhost.exe
ahk_class org.wezfurlong.wezterm
ahk_exe wezterm-gui.exe