akishin999の日記

調べた事などを書いて行きます。

Vim で全角空白入力時に半角空白に置き換える

職場の人から「Vim で全角空白を入力した場合に、自動的に半角空白に置き換えたい」という話を聞いて、確かに便利そうだと思って調べてみました。
通常であれば inoremap とか使えば良さそうなんですが、どうやら全角空白には効かない模様。

" 普通の全角記号を半角に変更するのは OK
inoremap * *
inoremap = =
inoremap ( (
inoremap ) )
" 全角空白を半角空白に変更するのは NG??
inoremap   <Space>

全角空白の特別な書き方があるのかも知れませんが、適当にいろいろと試してみた限りでは分からず・・・。
簡単に出来ないとなると余計気になって調べてみたら、InsertCharPre イベントが使える場合は以下のようにすれば出来るようです。

autocmd InsertCharPre <buffer> if v:char == ' ' | let v:char = " " | endif 

というわけで、inoremap で上手く行かない場合は InsertCharPre イベントを試してみるといいかもですね。
ただ、CentOSYum で入る Vim など、若干古いバージョンでは InsertCharPre イベントが 使えなかったりもするので、「:help InsertCharPre」などで事前に使えるか調べておくといいかと思います。