⌨️
Vim を IME として使いこなす
この記事は、kuuさんの2023年3月15日のVim駅伝の記事に影響を受けて作成しました。
要約
日本語入力の度にVimを起動していると、たまにモッサリすることがありました。そこで、日本語入力用のVimを i3 や sway の scratchpad に常駐させることでこの問題を改善しました。
動機
私の Vim は起動時間が 40ms 程なのですが、起動時にいくつかの外部プロセスを起動しているためか、稀に起動が遅くなる時がありました。
私は OS の IME は削除して、すべての日本語入力を Vim 上で行っているため、たまに起きるこの遅延を何とも歯痒く感じていました。
そこで、日本語入力用の Vim を常にどこかに起動させておいて、日本語を入力する度に呼び出せたら便利だなと思い、i3 や sway の scratchpad を利用してみたら良いんじゃないかと思い至りました。
なお、Vim での日本語入力には前述のkuuさん作成の skkeleton というプラグインを使っています。 入力方法は SKK + AZIK にしています。
実装
sway の設定ファイルに以下の2行を追加しておき、対応するシェル・スクリプトも作成します。i3 用には適宜書き換えてください。
私はAlt+I
で日本語入力用の Vim の表示をトグルさせているため、このようになります。
~/.config/sway/config
for_window [app_id="FloatingVim"] floating enable
bindsym $mod+i exec XMODIFIERS=@im= ~/.config/sway/ime.sh
ime.sh
#!/bin/bash -u
FloatingVim=$(swaymsg -t get_tree | jq -c '.. | .floating_nodes? | arrays[] | select(.app_id=="FloatingVim")')
if [ -z $FloatingVim ]; then
wezterm --config initial_rows=10 --config initial_cols=70 --config enable_tab_bar=false --config window_background_opacity=0.4 --config text_background_opacity=0.4 start --class FloatingVim vim
else
if [ "$(echo $FloatingVim | jq .focused)" = 'true' ]; then
swaymsg "move window to scratchpad"
else
swaymsg "[app_id=\"FloatingVim\"] focus"
fi
fi
その他
Vim に翻訳用のプラグインや生成 AI 用のプラグインを入れておけば、この日本語入力用の Vim からもサクっと利用することができて便利でした。
Discussion