⌨️

Vim を IME として使いこなす

2023/07/12に公開

この記事は、kuuさんの2023年3月15日のVim駅伝の記事に影響を受けて作成しました。

要約

日本語入力の度にVimを起動していると、たまにモッサリすることがありました。そこで、日本語入力用のVimを i3sway の 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 からもサクっと利用することができて便利でした。

GitHubで編集を提案

Discussion