Vimには括弧の片方にカーソルが乗ると対となるもう片方のハイライトしてくれる matchparenという機能があります。
この機能は標準で入っていて結構便利なんですが、対の検索をするのに ちょっと重たくなってしまうことがあります。
このmatchparenの機能を簡略化してパフォーマンスを格段に上げた vim-parenmatch というプラグインがリリースされたのでそれを使い始めました。
vim-parenmatch
詳しくは作者さんのページで。
ステータスラインのカスタマイズをする lightline.vim というプラグインとかを作ってる itchynyさんのプラグインです。
lightlineの時もそうでしたがブログの方で実装についても 細かく書いてあるのでVimスクリプトを学ぶ意味でもブログの方を見ておくと面白いです。
丁度ちょっと前にVimをちょっとでも快適にしようと思って
let g:loaded_matchparen = 1
を.vimrcに入れたところだったのでまさに
なタイミングで出てきた感じです。
それ程今までも必要としてなかったかな、と思ってましたが、
いざ使えなくしてみるとちょっとした時に確認が出来なくてわざわざ%
を押して
確認したりする作業が入ってちょっと不便だな、と感じていたところだったので。
取り敢えず入れてみましたが、ハイライトがアンダーラインで控えめに表示される (matchparenだと対の部分がバックグラウンドの色が変わったりする)と言った 表示の違いがありますが、使ってみた感じでは 不足はない感じで快適に使えています。
古いバージョンで使っている場合等にちょっと注意点
で、一つ導入時に注意点があって、このプラグインの中では OptionSetというイベントが使用されています。
OptionSet
オプションが設定された後。パターンは長い(短縮
しない)オプション名に対してマッチする。
変数 |v:option_old| に変更前の値が格納され、
|v:option_new| には新しく設定された値が格納さ
れ、 |v:option_type| にはオプションの変更のス
コープがグローバルかローカルかが格納される。
|<amatch>|は対象のオプション名が設定される。'key' の変更の際にはあえてイベントが発生しない
ようにしている。使用例: 'backupdir' や 'undodir' で指定された
ディレクトリが存在しているかチェックし、もしな
ければディレクトリを作成する。Note: この自動コマンド中でオプションの値をリセ
ットするのは、プラグインの挙動を破壊するため、
良くない。この自動コマンドの実行は `:noa` を使
うことで抑制することができる。
こんな感じのautocommand
用のイベント定義ですが、この
イベントは
7.4のパッチ786で追加されています。
このパッチは昨年7月位に出ているのでそれ以前にVimをインストールしていたりして OptionSetが無いと、
$ vim
Error detected while processing /home/user/.vim/dein/.dein/plugin/parenmatch.vim:
line 21:
E216: No such group or event: OptionSet matchpairs call parenmatch#setup()
Press ENTER or type command to continue
なエラーが出てくると思います。
いくつかの環境で.vimrcを使っていて、古い環境でもそのままの もので使いたい、といった場合には
1 2 3 |
|
の様にバージョンとパッチで必要なものがなければインストールしないように
しておく必要があります。
(作者ブログの例にあるようなNeoBundle
の場合でも勿論同様に出来ます。)
let g:loaded_matchparen = 1
オプションを設定してこのプラグインを入れないと
括弧のハイライトが一切なくなりますが、
もし、古いVimでは多少遅くても元のハイライトを使いたい、と言う場合には
このオプション設定も上のバージョンチェックのif
の中に入れてしまえば
古い環境ではVim本体のmatchparen
を呼び、
パッチが入った環境ではparenmatch
を呼べる様になります。