rcmdnk's blog

大塚 マッチ 500ml×24本

Vimには括弧の片方にカーソルが乗ると対となるもう片方のハイライトしてくれる matchparenという機能があります。

この機能は標準で入っていて結構便利なんですが、対の検索をするのに ちょっと重たくなってしまうことがあります。

このmatchparenの機能を簡略化してパフォーマンスを格段に上げた vim-parenmatch というプラグインがリリースされたのでそれを使い始めました。

vim-parenmatch

詳しくは作者さんのページで。

Vimの標準プラグインmatchparenが遅かったので8倍くらい速いプラグインを作りました - プログラムモグモグ

ステータスラインのカスタマイズをする 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で追加されています。

Release v7.4.786: patch 7.4.786 · vim/vim

このパッチは昨年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
if (v:version == 704 && has("patch786")) || v:version >= 705
  call dein#add('itchyny/vim-parenmatch')
endif

の様にバージョンとパッチで必要なものがなければインストールしないように しておく必要があります。 (作者ブログの例にあるようなNeoBundleの場合でも勿論同様に出来ます。)

let g:loaded_matchparen = 1オプションを設定してこのプラグインを入れないと 括弧のハイライトが一切なくなりますが、 もし、古いVimでは多少遅くても元のハイライトを使いたい、と言う場合には このオプション設定も上のバージョンチェックのifの中に入れてしまえば 古い環境ではVim本体のmatchparenを呼び、 パッチが入った環境ではparenmatchを呼べる様になります。

Sponsored Links
Sponsored Links

« HomebrewのFormulaとCaskで重複してるアプリについて GNU screenインストール時にutmp.c内でe_terminationが定義されて無い等のエラーが出る場合の対処法 »

}