パーソナルツール

matchit.vim : 「%」による対応括弧へのカーソル移動機能を拡張

作者: 小見 拓 最終変更 2012年01月10日 02時06分

プログラムのコードで一つのブレース、括弧に対応する ブレース、括弧やらを探し出して、その場所に移動する機能を強化し、 HTML、XMLのタグなど複数の文字からなる記号でも、 対応記号へのジャンプを可能にするスクリプトです。 (Windows, Mac)

概要

matchit.zip : extended % matching for HTML, LaTeX, and many other languages
http://www.vim.org/script.php?script_id=39

vimの標準能力である 「%」キーで対応するブレースや括弧に飛ぶ機能 を強化します。
プログラムのコードで一つのブレース、括弧に対応する ブレース、括弧やらを探し出して、その場所に移動する機能を強化し、
HTML、XMLのタグなど複数の文字からなる記号でも、 対応記号へのジャンプを可能にするスクリプトです。
vim6であれば、デフォルトで含まれています。

インストール方法

デフォルトでvim6に含まれているものの、 初期状態では無効化されています。
設定ファイル_vimrc、もしくは.vimrcファイルに、 下の設定を追加して、スクリプトを有効にして下さい。

:source $VIMRUNTIMEmacros/matchit.vim
ファイル URL
matchit.vim http://www.vim.org/script.php?script_id=39

使用方法

使い方はとても簡単で、
ある特定のブレース上で、もしくはタグ上で、

%

を押すと、対応するブレース、括弧に移動します。
このスクリプトはvimエディタ標準の機能の 「 パーセント「%」キーで対応する括弧へカーソルを移動する 」機能を強化し、
様々なパターンに対応できるようにしたものです。

対応するペアの設定

「b:match_words」変数の設定方法

対応するペアを設定する場合には、「b:match_words」に、 ペアの組み合わせをコロン(:)で区切って指定してください。
例えば、「if」と「endif」の間を「%」で移動したい場合は、 下のように設定してください。

:let b:match_words = "if:endif"

複数のペアを設定する場合は、それぞれのペアをカンマで区切ります。

:let b:match_words = "if:endif,(:),{:},[:]"

間に半角スペースがあっても問題ありません。
下の例だと、「if」と「end if」に対応します。

:let b:match_words = "if:end if"

大文字小文字の区別をしないようにする。

例えば、

:let b:match_words="begin:end"

と設定すると、 begin - end間は「%」コマンドで行き来できるようにはなりますが、
begin - END間では行き来できるようにはなりません。大文字、小文字が違うからです。
「%」コマンドで、大文字小文字の区別なく移動したいなら、 下の設定をvimエディタの設定ファイルに追加してください。

:let b:match_ignorecase = 1

単語は<、>で囲んでおいた方が良い

単語を「match_words」変数で指定する場合は、 まぎわらしい単語にマッチすることを避けるために
その単語を「<」「>」で囲んでおいた方が大抵の場合、良いでしょう。

:let b:match_words="begin:end"

↑こうではなく、↓このように設定する。

:let b:match_words="<begin>:<end>"

そうでないと、例えば、

:let b:match_words="begin:end"

と設定しているとして、次の例、
1行目の「begin」で「%」コマンドを実行した時に、
5行目の「end」ではなく、3行目にカーソルが移動してしまうからです。

1: begin
2:
3: dddddendddddd
4:
5: end

「match_words」には正規表現が使える

「match_words」には正規表現も使用できます。
次のように設定すると、

  • beain/end
  • bebin/end
  • becin/end

のどれにもヒットすします。

:let b:match_words="be.in:end"

「matchpairs」の設定も生かしたいなら

次のように「b:match_words」に、 「matchpairs」変数の中身を足してしまえば良いです。

:let b:match_words = &matchpairs . ',begin:end'

Note

「matchpairs」変数の詳細については、
パーセント「%」キーで対応する括弧へカーソルを移動する 」の記事を 参照してください。

注意事項

「matchit.txt」というmatchit.vimスクリプトの詳しい説明が書かれたドキュメントが vimエディタに添付しています。
かなり良くできたドキュメントなので、一度見ておくと良いでしょう。

ドキュメントアクション
コメント
blog comments powered by Disqus