対応するカッコへ飛ぶ
カッコが入れ子になっていると、どれとどれが対応しているのか目で追うのは大変です。% はカーソルの先にあるカッコの相方へ一発で飛びます。入れ子は数えてくれるので、自分で対応を確かめる必要はありません。
カッコの上にいなくてよい
% は「カーソル位置から右へ最初に見つかったカッコ」を対象にします。行のどこにいても押せばそのカッコの相方へ飛ぶので、先にカッコまでカーソルを動かす必要がありません。
対応する丸カッコ・角カッコ・波カッコを扱います。入れ子になっていても数えて対応を取るので、内側のカッコに引っかかることはありません。
対応が取れているかの確認に使う
関数の終わりがどこか分からないとき、開きカッコの上で % を押せば閉じカッコまで飛べます。飛んだ先が思っていた場所と違えば、その時点でカッコの対応が崩れていると分かります。
本物のVimには対応するカッコを光らせる機能(matchparen プラグイン)が最初から入っていて、カーソルを置くだけで相方が強調されます。% と合わせて使うと構造を追いやすくなります。
% を構造の削除に使う
% はモーションなので、オペレータの後ろに置けます。開きカッコの上で d% を押せば、対応する閉じカッコまでがカッコごと消えます。関数呼び出しの引数を丸ごと消したいときや、条件式を差し替えたいときに効きます。
消す前に範囲を見たいなら v% で選択してから d を押します。入れ子が深い箇所では、選んでから確かめるほうが安全です。
if や endif にも飛ばせる
既定の % が対応を取るのはカッコ3種類だけですが、Vimには matchit という拡張が同梱されていて、packadd matchit で有効にすると if と endif、HTMLの開始タグと終了タグの間も % で往復できるようになります。Neovimにも同じものが入っています。
言語ごとの対応は matchpairs と、ファイルタイプごとの b:match_words という変数が持っています。自分が書く言語で % が効かないときは、この2つが設定されているかを確かめてください。
文字列やコメントの中のカッコに注意
% はカッコの数を数えているだけなので、文字列リテラルやコメントの中に片方だけのカッコが書かれていると、対応を取り違えます。print("(") のような行で意図しない場所へ飛ぶのはこのためです。
飛んだ先が明らかにおかしいときは、カッコの対応そのものが崩れているか、この取り違えのどちらかです。matchparen の強調表示と見比べると、どちらなのか切り分けられます。
このレッスンで扱うキー
| キー | 動き |
|---|---|
| % | 対応するカッコへ |
| d% | カッコの中身ごと削除 |