新イベント"ModeChanged"にやっと気がついたお話
枕
文章が書けるところが見つかったのでそれに引き上げられてVim熱も上がってきたので、久しぶりにvimrc弄ったり、何なら運用をあきらめていたdroidVimの再運用をやったりしているんですけど、その最中でちょっと気がついたことがあって試してみたところ……いい感じのが見つかりまして。
TL;DR
" autoIM
augroup autoIM
autocmd!
autocmd ModeChanged *:n set iminsert=0
augroup END
なにこれ?
オートコマンドイベント"ModeChanged"は、Vim使用中にモードが遷移した際にイベントを発行するもので、詳細なパターン指定も可能です。記述の詳細はvimhelpにお任せするとして、具体的に何がしたいのでどうしたかの説明に入ります。
Vim対日本語入力システム
海外のツール群を使う限り、「マルチバイト文字にどのくらい対応しているか」は常に懸念事項であり、実際にVimはこの問題と長い付き合いをしています。まぁこれに関して現在のVimは"iminsert"オプションで現在の入力システムをある程度柔軟にトグルできるようになりました。これは前回のVimの話でも日本語入力をオンにしながら挿入モードに入るキーマップを用意している、という話をしています。じゃあ挿入モード以外はどうなんだい?という話なんですけど、実はここに手を焼いていたんです。具体的に"r"での一文字置換や、"f"でのカーソル移動時にもマルチバイト文字を扱いたかった。で、今回それが解決したという話です。
じゃあ具体的にこの設定をした後どう書けばいい?って話なんですけど……
noremap <Leader>f :<C-u>set iminsert=2<CR>f
……のように書いています。これでノーマルモード内で"<Leader>f"とすれば、カーソル移動の文字入力を待ちながら日本語入力がオンになり、入力後のノーマルモードでは自動的に日本語入力がオフになります。
「それ、どのくらい便利なの?」という話ですが、例えば「てにおは」みたいな接続詞や句読点に対してそこそこ以上に優秀に機能するはずです。尤も句読点に関してはプラグインを活用する方法もあるのですが、まぁ覚えておいて損はないと思います。応用的に鉤括弧の始点に"T"で戻って、"ct」"とすれば鍵括弧内だけ打ち直せる等々……。
とりあえず「ええのめっけたわ!」という話だけ書き残したかったんです。それだけ。