WSL2のUbuntuにNeoVimを入れてIMEをオフにする方法

WSL2のUbuntuにNeoVimを入れてIMEをオフにする方法

日本人がVimを使用する上で避けては通れない日本語入力IMEをインサートモードから抜ける時に自動的にオフにする方法を紹介します。

WSL2のNeoVimを入れて使う環境とは

WSL (Windows Subsystem for Linux)を使用するとWindows上でネイティブなLinux環境を実行できます。
ただし、Windows上で動くIMEをWSL2(Ubuntu)上のNeoVimから制御しようと思うと、簡単には行きません。

zenhanをインストール

IME制御をc++から行うアプリケーションのzenhanを任意のディレクトリにインストールします。

  • 引数に0を与えて実行するとIMEをオフ
  • 引数に1を与えて実行するとIMEをオン

iuchim / zenhan
https://github.com/iuchim/zenhan

参考記事
Win版の VS Code+VSCodeVim でノーマルモードに戻った時にIMEを半角英数入力にする

scoopからもインストール可能です

scoop install zenhan

WSL2のUbuntuで.profileを作成する

以下の手順でユーザールートディレクトリに.profileを作成します。

touch ~/.profile

環境変数 zenhanを追加する

.profileをvi等で開き、zenhanの環境変数を追記します。
パスは各自インストール先に変更して下さい。

export zenhan='/mnt/c/Users/******/scoop/apps/zenhan/current/zenhan.exe'

パスが正しく通ってアプリケーションが実行されるか確認します。
ターミナルから以下のコマンドでIMEの半角・全角が切り替わる事を確認します。

$zenhan 1
>> IMEがオンになる
$zenhan 0
>> IMEがオフになる

NeoVimの設定

NeoVimの設定ファイルinit.vimを作成します。
既に存在する場合はパスしてOKです。

mkdir ~/.config/nvim
touch ~/.config/nvim/init.vim

init.vimにshellの設定をする

nvimで作成したinit.vimを開きます。

nvim ~/.config/nvim/init.vim

その後、以下の設定を追記します。
インサートモード・コマンドラインを抜ける時にIMEをオフにします。

let &shell='/usr/bin/bash --login'
autocmd InsertLeave * :call system('${zenhan} 0')
autocmd CmdlineLeave * :call system('${zenhan} 0')

shellの設定について

NeoVimのsystemで実行されるコマンドは、shellでセットされたシェル上で実行されます。
ただし、このシェルはbashにログインしていない状態のため、.profileは実行されておらず環境変数zenhanは追加されていません。

なので、実行するシェルの引数に--loginを追加してユーザーがログインした状態 = .profileが実行されて環境変数が追加済みの状態で実行されるようにします。

動作確認

インサートモード、コマンドラインから抜けるときにIMEが自動的にオフに変更されることを確認します。

プログラミングカテゴリの最新記事