Vim の検索/置換系キーマップを晒してみる

一連の Vim Hacks を読んでかなりパワーアップしたので、自分の vimrc から検索/置換系コマンドのキーマップを抜き出して晒してみます。

置換コマンドは eregex.vim のもの(:S)を使っています。Perl/Ruby互換の正規表現の書き方ができ、メタキャラクタとしての「()」「|」「+」などをエスケープしなくていいので便利です。*1

置換のためのキーマップはよく使うものは1打で実行できるようにしてあり、それ以外の場合は prefix に続いて「s」で <cword> に対し完全一致、「g」で部分一致で置換対象にします。検索とのアナロジーでいくと「*」と「g」にしたいところですが、「*」は押しにくいので substitute の「s」にしました。

置換の対象範囲は prefix で決まり、「,」でバッファ全体、「,v」で直前の選択範囲、「<Leader>」で全バッファ(:bufdo)になります。

grep関数はちょっと改造して使わせてもらっています。グロブパターンが指定されなかった場合には 「**/*」を設定するようにし、マッチがあった場合は copen するようにしました。この辺は vimfiler の grep機能を参考にしています。

後書き

最初はキーマップの一貫性を重視し、検索/置換の対象範囲によって共通の prefix を使うように設定したのですが、打鍵数が増えて使いにくいものとなりました。そこで、使用頻度の高いものは1打で実行できるように修正したのが現在の形です。

prefix の一貫性にこだわり過ぎると使用頻度の大きいもの、小さいものが同じ打鍵数でフラットに並ぶことになるので、「キーマップの一貫性≠使いやすさ」だなというのを痛感しました。

追記

このエントリで紹介しているキーマップ設定はその後さらに進化(?)して、現在(2010-10-18)は以下のようなことになっている↓

*1:しかし、これがいいことがどうかは微妙。vimrc で凝った設定をしたり Vim Script を書くときには結局 Vim正規表現を使うことになるので、Vim正規表現エスケープ規則はやっぱり把握する必要があります。ただ、置換コマンドでは単純にメタキャラクタのエスケープが不要になって打鍵数が減るだけでも便利かなと思ったり。