VSCode Vimのexコマンドの置換は件数が増えると非常に遅くなります。 特に正規表現を使っている場合は待っていられないほど遅いです。 exコマンドの置換 以下のようにファイル全体を置換する場合、…
日本人が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'
環境変数の値を出力してパスが正しく通っているか確認します。
$echo ${zenhan}
/mnt/c/Users/******/scoop/apps/zenhan/current/zenhan.exe
WSL2は.profileと.bash_profileの両方が存在している場合、.bash_profileが読み込まれて.profileは読み込まれません。
.bash_profileに.profileを読み込むように追記しましょう。
if [[ -f ~/.profile ]] ; then
. ~/.profile
fi
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が自動的にオフに変更されることを確認します。
コメントを書く