WSL環境でNeovimのInsertモード終了時にIMEをオフにする
はじめに
Neovimを使っていると、日本語入力システム(IME)の切り替えを煩わしく感じることがあります。
特にInsertモードから抜けたときにIMEをオフにする設定がないと、不要な文字入力が発生したり、思わぬ混乱を招くことがあります。
当然同じような事を思うユーザーは多く、解決を図る記事も沢山あります。
- Vim/Neovimからモード切替時にIMEを制御する - Regen Techlog
- 【NeoVim】モード切り替え時にIMEをoffにする
- Shu Nakamura | VimとIMEの仲を取り持つ
- Neovimオススメ設定② 日本語入力を快適にするim-select.nvimのすすめ
ところで、私はWSLユーザーなのですが、WSLからWindowsのIMEをコントロールする、となると途端に選択肢は多くありません。
最後の記事のim-select.nvim
がそうしているように、im-select.exe
を使うというのが一番よく見る解決策です。
しかし、im-select.exe
はやたらと重く、やたらと難解な設定も強いられるため、あまり良い解決とは言いがたいものです。
この記事では、WSL環境にフォーカスして、NeovimのInsertモードを終了した際にIMEを自動でオフにする設定をご紹介します。
使用するツールと背景
WSL環境では、IME制御のために zenhan を使用します。
これはspzenhan.vimをForkしたツールです。
spzenhan.vimは、元を辿ればzenhanのようです。
どちらも作者の方がVSCodeでの設定事例を記事にされていました。
- WSL2+VSCodeNeovim+ノーマルモードIME自動OFF#VSCode - Qiita
- Win版のVSCode+VSCodeVimでノーマルモードに戻った時にIMEを半角英数入力にする #VSCode - Qiita
しかし、いくらか気に入らない部分があったため、個人的なフォークとしています。
- APIのレスポンスが意図しないものの場合、プロセスが正常終了してしまい紛らわしかった
- ビルド済みバイナリをリポジトリ内に含めたくなかった
- リリースに置いておきたい
- 状態を取得できるアイディア自体はspzenhan.vimの方が良かった
- GitHub Actionsで自動ビルドしておきたかった
- Insertモードに入ったときのIME状態を記憶して復元する機能は、実際の使用感を考慮して削除した
- 前回InsertモードでIMEがオンだったとしても、次回の入力内容が必ずしも日本語とは限らない
- 前回Insertモードの時のIMEの状態を記憶してくれる⇒ユーザー自身が覚えていない状態に戻されることがかえって混乱を招く可能性がある
- 付属しているVimプラグインの設定が複雑
- 自分の設定だけで完結する方が見通しよくできそうだった
- Neovim/VSCodeを配慮する気はなかった
私がForkした方のzenhanも、ビルドしたバイナリはreleaseから取得できます。
適当なPATHの通ったディレクトリにダウンロードして、実行権限を与えておけば使えます。
$ gh --repo kyoh86/zenhan release download -p '*.exe' -O ~/.local/bin/zenhan.exe
$ chmod +x ~/.local/bin/zenhan.exe
設定の具体例
以下は、InsertLeave
イベントをトリガーとして、zenhan
でIMEを自動でオフにする設定です。
local uname = vim.uv.os_uname()
local group = vim.api.nvim_create_augroup("kyoh86-conf-ime", {})
if uname.sysname == "Linux" then
if os.getenv("WSL_DISTRO_NAME") ~= "" then
vim.api.nvim_create_autocmd("InsertLeave", {
group = group,
command = "silent! !zenhan.exe 0",
})
else
-- 割愛: WSL以外の設定
end
else
-- 割愛: Linux以外の設定
end
-
WSL環境での判定 : 環境変数
WSL_DISTRO_NAME
をチェックして、WSL内で実行されているかを確認する -
シンプルなコマンド実行 :
zenhan.exe
を使って直接IMEをオフに切り替える
まとめ
WSL環境でNeovimを快適に使うための、Insertモード終了時にIMEを自動オフにする設定を紹介しました。この設定により、煩わしいIME切り替えの手間を省き、集中して編集作業に取り組むことができます。
ぜひ、ご自身の環境に合わせてカスタマイズしてみてください。
Discussion